<!--
**********************************************************
** WARNING: This file is generated from CHANGES.txt by the 
**          Perl script 'changes2html.pl'.
**          Do *not* edit this file!
**********************************************************
          
****************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
****************************************************************************
-->
<html>
<head>
  <title>Lucene Change Log</title>
  <link rel="stylesheet" href="ChangesFancyStyle.css" title="Fancy">
  <link rel="alternate stylesheet" href="ChangesSimpleStyle.css" title="Simple">
  <link rel="alternate stylesheet" href="ChangesFixedWidthStyle.css" title="Fixed Width">
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <SCRIPT>
    function toggleList(id) {
      listStyle = document.getElementById(id + '.list').style;
      anchor = document.getElementById(id);
      if (listStyle.display == 'none') {
        listStyle.display = 'block';
        anchor.title = 'Click to collapse';
        location.href = '#' + id;
      } else {
        listStyle.display = 'none';
        anchor.title = 'Click to expand';
      }
      var expandButton = document.getElementById('expand.button');
      expandButton.disabled = false;
      var collapseButton = document.getElementById('collapse.button');
      collapseButton.disabled = false;
    }

    function collapseAll() {
      var unorderedLists = document.getElementsByTagName("ul");
      for (var i = 0; i < unorderedLists.length; i++)
        unorderedLists[i].style.display = "none";
      var orderedLists = document.getElementsByTagName("ol");
      for (var i = 0; i < orderedLists.length; i++)
        orderedLists[i].style.display = "none"; 
      var anchors = document.getElementsByTagName("a");
      for (var i = 0 ; i < anchors.length; i++) {
        if (anchors[i].id != '')
          anchors[i].title = 'Click to expand';
      }
      var collapseButton = document.getElementById('collapse.button');
      collapseButton.disabled = true;
      var expandButton = document.getElementById('expand.button');
      expandButton.disabled = false;
    }

    function expandAll() {
      var unorderedLists = document.getElementsByTagName("ul");
      for (var i = 0; i < unorderedLists.length; i++)
        unorderedLists[i].style.display = "block";
      var orderedLists = document.getElementsByTagName("ol");
      for (var i = 0; i < orderedLists.length; i++)
        orderedLists[i].style.display = "block"; 
      var anchors = document.getElementsByTagName("a");
      for (var i = 0 ; i < anchors.length; i++) {
        if (anchors[i].id != '')
          anchors[i].title = 'Click to collapse';
      }
      var expandButton = document.getElementById('expand.button');
      expandButton.disabled = true;
      var collapseButton = document.getElementById('collapse.button');
      collapseButton.disabled = false;

    }

    var newerRegex = new RegExp("^(?:trunk|2\\.4\\.0)");
    function isOlder(listId) {
      return ! newerRegex.test(listId);
    }

    function escapeMeta(s) {
      return s.replace(/(?=[.*+?^${}()|[\]\/\\])/g, '\\');
    }

    function shouldExpand(currentList, currentAnchor, listId) {
      var listName = listId.substring(0, listId.length - 5);
      var parentRegex = new RegExp("^" + escapeMeta(listName) + "\\.");
      return currentList == listId
             || (isOlder(currentAnchor) && listId == 'older.list')
             || parentRegex.test(currentAnchor);
    }

    function collapse() {
      /* Collapse all but the first and second releases. */
      var unorderedLists = document.getElementsByTagName("ul");
      var currentAnchor = location.hash.substring(1);
      var currentList = currentAnchor + ".list";

      for (var i = 0; i < unorderedLists.length; i++) {
        var list = unorderedLists[i];
        /* Collapse the current item, unless either the current item is one of
         * the first two releases, or the current URL has a fragment and the
         * fragment refers to the current item or one of its ancestors.
         */
        if (list.id != '2.9.4.list' 
            && list.id != '2.9.3.list'
            && (currentAnchor == ''
                || ! shouldExpand(currentList, currentAnchor, list.id))) {
          list.style.display = "none";
        }
      }
      var orderedLists = document.getElementsByTagName("ol");
      for (var i = 0; i < orderedLists.length; i++) {
        var list = orderedLists[i];
        /* Collapse the current item, unless the current URL has a fragment
         * and the fragment refers to the current item or one of its ancestors.
         */
        if (currentAnchor == ''
            || ! shouldExpand(currentList, currentAnchor, list.id)) {
          list.style.display = "none";
        }
      }
      /* Add "Click to collapse/expand" tooltips to the release/section headings */
      var anchors = document.getElementsByTagName("a");
      for (var i = 0 ; i < anchors.length; i++) {
        var anchor = anchors[i];
        if (anchor.id != '') {
          if (anchor.id == '2.9.4' || anchor.id == '2.9.3') {
            anchor.title = 'Click to collapse';
          } else {
            anchor.title = 'Click to expand';
          }
        }
      }

      /* Insert "Expand All" and "Collapse All" buttons */
      var buttonsParent = document.getElementById('buttons.parent');
      var expandButton = document.createElement('button');
      expandButton.appendChild(document.createTextNode('Expand All'));
      expandButton.onclick = function() { expandAll(); }
      expandButton.id = 'expand.button';
      buttonsParent.appendChild(expandButton);
      var collapseButton = document.createElement('button');
      collapseButton.appendChild(document.createTextNode('Collapse All'));
      collapseButton.onclick = function() { collapseAll(); }
      collapseButton.id = 'collapse.button';
      buttonsParent.appendChild(collapseButton);
    }

    window.onload = collapse;
  </SCRIPT>
</head>
<body>

<h1>Lucene Change Log</h1>

<div id="buttons.parent"></div>

<h2><a id="2.9.4" href="javascript:toggleList('2.9.4')">Release 2.9.4  [2010-12-03]</a></h2>
<ul id="2.9.4.list">
  <li><a id="2.9.4.changes_in_runtime_behavior" href="javascript:toggleList('2.9.4.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.9.4.changes_in_runtime_behavior.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2689">LUCENE-2689</a>: NativeFSLockFactory no longer attempts to acquire a
test lock just before the real lock is acquired.<br /><span class="attrib">(Surinder Pal
Singh Bindra via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2762">LUCENE-2762</a>: Fixed bug in IndexWriter causing it to hold open file
handles against deleted files when compound-file was enabled (the
default) and readers are pooled.  As a result of this the peak
worst-case free disk space required during optimize is now 3X the
index size, when compound file is enabled (else 2X).<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2773">LUCENE-2773</a>: LogMergePolicy accepts a double noCFSRatio (default =
0.1), which means any time a merged segment is greater than 10% of
the index size, it will be left in non-compound format even if
compound format is on.  This change was made to reduce peak
transient disk usage during optimize which increased due to
<a href="http://issues.apache.org/jira/browse/LUCENE-2762">LUCENE-2762</a>.<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.4.bug_fixes" href="javascript:toggleList('2.9.4.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(24)
    <ol id="2.9.4.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2142">LUCENE-2142</a> (correct fix): FieldCacheImpl.getStringIndex no longer
throws an exception when term count exceeds doc count.<br /><span class="attrib">(Mike McCandless, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2513">LUCENE-2513</a>: when opening writable IndexReader on a not-current
commit, do not overwrite "future" commits.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2536">LUCENE-2536</a>: IndexWriter.rollback was failing to properly rollback
buffered deletions against segments that were flushed<br /><span class="attrib">(Mark Harwood
via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2541">LUCENE-2541</a>: Fixed NumericRangeQuery that returned incorrect results
with endpoints near Long.MIN_VALUE and Long.MAX_VALUE:
NumericUtils.splitRange() overflowed, if
- the range contained a LOWER bound
  that was greater than (Long.MAX_VALUE - (1L &lt;&lt; precisionStep))
- the range contained an UPPER bound
  that was less than (Long.MIN_VALUE + (1L &lt;&lt; precisionStep))
With standard precision steps around 4, this had no effect on
most queries, only those that met the above conditions.
Queries with large precision steps failed more easy. Queries with
precision step &gt;=64 were not affected. Also 32 bit data types int
and float were not affected.<br /><span class="attrib">(Yonik Seeley, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2593">LUCENE-2593</a>: Fixed certain rare cases where a disk full could lead
to a corrupted index<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2620">LUCENE-2620</a>: Fixed a bug in WildcardQuery where too many asterisks
would result in unbearably slow performance.<br /><span class="attrib">(Nick Barkas via Robert Muir)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2627">LUCENE-2627</a>: Fixed bug in MMapDirectory chunking when a file is an
exact multiple of the chunk size.<br /><span class="attrib">(Robert Muir)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2634">LUCENE-2634</a>: isCurrent on an NRT reader was failing to return false
if the writer had just committed<br /><span class="attrib">(Nikolay Zamosenchuk via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2650">LUCENE-2650</a>: Added extra safety to MMapIndexInput clones to prevent accessing
an unmapped buffer if the input is closed<br /><span class="attrib">(Mike McCandless, Uwe Schindler, Robert Muir)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2384">LUCENE-2384</a>: Reset zzBuffer in StandardTokenizerImpl when lexer is reset.<br /><span class="attrib">(Ruben Laguna via Uwe Schindler, sub-issue of <a href="http://issues.apache.org/jira/browse/LUCENE-2074">LUCENE-2074</a>)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2658">LUCENE-2658</a>: Exceptions while processing term vectors enabled for multiple
fields could lead to invalid ArrayIndexOutOfBoundsExceptions.<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2235">LUCENE-2235</a>: Implement missing PerFieldAnalyzerWrapper.getOffsetGap().<br /><span class="attrib">(Javier Godoy via Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2328">LUCENE-2328</a>: Fixed memory leak in how IndexWriter/Reader tracked
already sync'd files.<br /><span class="attrib">(Earwin Burrfoot via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2549">LUCENE-2549</a>: Fix TimeLimitingCollector#TimeExceededException to record
the absolute docid.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2533">LUCENE-2533</a>: fix FileSwitchDirectory.listAll to not return dups when
primary &amp; secondary dirs share the same underlying directory.<br /><span class="attrib">(Michael McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2365">LUCENE-2365</a>: IndexWriter.newestSegment (used normally for testing)
is fixed to return null if there are no segments.<br /><span class="attrib">(Karthick
Sankarachary via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2730">LUCENE-2730</a>: Fix two rare deadlock cases in IndexWriter<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2744">LUCENE-2744</a>: CheckIndex was stating total number of fields,
not the number that have norms enabled, on the "test: field
norms..." output.<br /><span class="attrib">(Mark Kristensson via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2759">LUCENE-2759</a>: Fixed two near-real-time cases where doc store files
may be opened for read even though they are still open for write.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2618">LUCENE-2618</a>: Fix rare thread safety issue whereby
IndexWriter.optimize could sometimes return even though the index
wasn't fully optimized<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2767">LUCENE-2767</a>: Fix thread safety issue in addIndexes(IndexReader[])
that could potentially result in index corruption.<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2762">LUCENE-2762</a>: Fixed bug in IndexWriter causing it to hold open file
handles against deleted files when compound-file was enabled (the
default) and readers are pooled.  As a result of this the peak
worst-case free disk space required during optimize is now 3X the
index size, when compound file is enabled (else 2X).<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2216">LUCENE-2216</a>: OpenBitSet.hashCode returned different hash codes for
sets that only differed by trailing zeros.<br /><span class="attrib">(Dawid Weiss, yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2782">LUCENE-2782</a>: Fix rare potential thread hazard with
IndexWriter.commit<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.4.api_changes" href="javascript:toggleList('2.9.4.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.4.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2773">LUCENE-2773</a>: LogMergePolicy accepts a double noCFSRatio (default =
0.1), which means any time a merged segment is greater than 10% of
the index size, it will be left in non-compound format even if
compound format is on.  This change was made to reduce peak
transient disk usage during optimize which increased due to
<a href="http://issues.apache.org/jira/browse/LUCENE-2762">LUCENE-2762</a>.<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.4.optimizations" href="javascript:toggleList('2.9.4.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.9.4.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2556">LUCENE-2556</a>: Improve memory usage after cloning TermAttribute.<br /><span class="attrib">(Adriano Crestani via Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2098">LUCENE-2098</a>: Improve the performance of BaseCharFilter, especially for
large documents.<br /><span class="attrib">(Robin Wojciki, Koji Sekiguchi, Robert Muir)</span></li>
    </ol>
  </li>
  <li><a id="2.9.4.new_features" href="javascript:toggleList('2.9.4.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.4.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2675">LUCENE-2675</a>: Add support for Lucene 3.0 stored field files also in 2.9.
The file format did not change, only the version number was upgraded to mark
segments that have no compression. FieldsWriter still only writes 2.9 segments
as they could contain compressed fields. This cross-version index format
compatibility is provided here solely because Lucene 2.9 and 3.0 have the
same bugfix level, features, and the same index format with this slight
compression difference. In general, Lucene does not support reading newer
indexes with older library versions.<br /><span class="attrib">(Uwe Schindler)</span></li>
    </ol>
  </li>
  <li><a id="2.9.4.documentation" href="javascript:toggleList('2.9.4.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.4.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2239">LUCENE-2239</a>: Documented limitations in NIOFSDirectory and MMapDirectory due to
Java NIO behavior when a Thread is interrupted while blocking on IO.<br /><span class="attrib">(Simon Willnauer, Robert Muir)</span></li>
    </ol>
  </li>
</ul>
<h2><a id="2.9.3" href="javascript:toggleList('2.9.3')">Release 2.9.3  [2010-06-18]</a></h2>
<ul id="2.9.3.list">
  <li><a id="2.9.3.changes_in_backwards_compatibility_policy" href="javascript:toggleList('2.9.3.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.3.changes_in_backwards_compatibility_policy.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2135">LUCENE-2135</a>: Added FieldCache.purge(IndexReader) method to the
interface.  Anyone implementing FieldCache externally will need to
fix their code to implement this, on upgrading.<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.3.changes_in_runtime_behavior" href="javascript:toggleList('2.9.3.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.9.3.changes_in_runtime_behavior.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2421">LUCENE-2421</a>: NativeFSLockFactory does not throw LockReleaseFailedException if
it cannot delete the lock file, since obtaining the lock does not fail if the
file is there.<br /><span class="attrib">(Shai Erera)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2060">LUCENE-2060</a>: Changed ConcurrentMergeScheduler's default for
maxNumThreads from 3 to 1, because in practice we get the most gains
from running a single merge in the backround.  More than one
concurrent merge causes alot of thrashing (though it's possible on
SSD storage that there would be net gains).<br /><span class="attrib">(Jason Rutherglen, Mike
McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.3.bug_fixes" href="javascript:toggleList('2.9.3.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(19)
    <ol id="2.9.3.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2046">LUCENE-2046</a>: IndexReader should not see the index as changed, after
IndexWriter.prepareCommit has been called but before
IndexWriter.commit is called.<br /><span class="attrib">(Peter Keegan via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2119">LUCENE-2119</a>: Don't throw NegativeArraySizeException if you pass
Integer.MAX_VALUE as nDocs to IndexSearcher search methods.<br /><span class="attrib">(Paul
Taylor via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2142">LUCENE-2142</a>: FieldCacheImpl.getStringIndex no longer throws an
exception when term count exceeds doc count.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2104">LUCENE-2104</a>: NativeFSLock.release() would silently fail if the lock is held by
another thread/process.<br /><span class="attrib">(Shai Erera via Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2283">LUCENE-2283</a>: Use shared memory pool for term vector and stored
fields buffers. This memory will be reclaimed if needed according to
the configured RAM Buffer Size for the IndexWriter.  This also fixes
potentially excessive memory usage when many threads are indexing a
mix of small and large documents.<br /><span class="attrib">(Tim Smith via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2300">LUCENE-2300</a>: If IndexWriter is pooling reader (because NRT reader
has been obtained), and addIndexes* is run, do not pool the
readers from the external directory.  This is harmless (NRT reader is
correct), but a waste of resources.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2422">LUCENE-2422</a>: Don't reuse byte[] in IndexInput/Output -- it gains
little performance, and ties up possibly large amounts of memory
for apps that index large docs.<br /><span class="attrib">(Ross Woolf via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2387">LUCENE-2387</a>: Don't hang onto Fieldables from the last doc indexed,
in IndexWriter, nor the Reader in Tokenizer after close is
called.<br /><span class="attrib">(Ruben Laguna, Uwe Schindler, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2417">LUCENE-2417</a>: IndexCommit did not implement hashCode() and equals()
consistently. Now they both take Directory and version into consideration. In
addition, all of IndexComnmit methods which threw
UnsupportedOperationException are now abstract.<br /><span class="attrib">(Shai Erera)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2467">LUCENE-2467</a>: Fixed memory leaks in IndexWriter when large documents
are indexed.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2473">LUCENE-2473</a>: Clicking on the "More Results" link in the luceneweb.war
demo resulted in ArrayIndexOutOfBoundsException.<br /><span class="attrib">(Sami Siren via Robert Muir)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2476">LUCENE-2476</a>: If any exception is hit init'ing IW, release the write
lock (previously we only released on IOException).<br /><span class="attrib">(Tamas Cservenak
via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2478">LUCENE-2478</a>: Fix CachingWrapperFilter to not throw NPE when
Filter.getDocIdSet() returns null.<br /><span class="attrib">(Uwe Schindler, Daniel Noll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2468">LUCENE-2468</a>: Allow specifying how new deletions should be handled in
CachingWrapperFilter and CachingSpanFilter.  By default, new
deletions are ignored in CachingWrapperFilter, since typically this
filter is AND'd with a query that correctly takes new deletions into
account.  This should be a performance gain (higher cache hit rate)
in apps that reopen readers, or use near-real-time reader
(IndexWriter.getReader()), but may introduce invalid search results
(allowing deleted docs to be returned) for certain cases, so a new
expert ctor was added to CachingWrapperFilter to enforce deletions
at a performance cost.  CachingSpanFilter by default recaches if
there are new deletions<br /><span class="attrib">(Shay Banon via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2299">LUCENE-2299</a>: If you open an NRT reader while addIndexes* is running,
it may miss some segments<br /><span class="attrib">(Earwin Burrfoot via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2397">LUCENE-2397</a>: Don't throw NPE from SnapshotDeletionPolicy.snapshot if
there are no commits yet<br /><span class="attrib">(Shai Erera)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2424">LUCENE-2424</a>: Fix FieldDoc.toString to actually return its fields<br /><span class="attrib">(Stephen Green via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2311">LUCENE-2311</a>: Always pass a "fully loaded" (terms index &amp; doc stores)
SegmentsReader to IndexWriter's mergedSegmentWarmer (if set), so
that warming is free to do whatever it needs to.<br /><span class="attrib">(Earwin Burrfoot
via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2486">LUCENE-2486</a>: Fixed intermittent FileNotFoundException on doc store
files when a mergedSegmentWarmer is set on IndexWriter.<br /><span class="attrib">(Mike
McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.3.api_changes" href="javascript:toggleList('2.9.3.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.9.3.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2281">LUCENE-2281</a>: added doBeforeFlush to IndexWriter to allow extensions to perform
operations before flush starts. Also exposed doAfterFlush as protected instead
of package-private.<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2356">LUCENE-2356</a>: Add IndexWriter.set/getReaderTermsIndexDivisor, to set
what IndexWriter passes for termsIndexDivisor to the readers it
opens internally when applying deletions or creating a
near-real-time reader.<br /><span class="attrib">(Earwin Burrfoot via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.3.optimizations" href="javascript:toggleList('2.9.3.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.9.3.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2135">LUCENE-2135</a>: On IndexReader.close, forcefully evict any entries from
the FieldCache rather than waiting for the WeakHashMap to release
the reference<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2161">LUCENE-2161</a>: Improve concurrency of IndexReader, especially in the
context of near real-time readers.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2360">LUCENE-2360</a>: Small speedup to recycling of reused per-doc RAM in
IndexWriter<br /><span class="attrib">(Robert Muir, Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.3.build" href="javascript:toggleList('2.9.3.build')">Build</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.3.build.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2488">LUCENE-2488</a>: Support build with JDK 1.4 and exclude Java 1.5 contrib
modules on request (pass '-Dforce.jdk14.build=true') when
compiling/testing/packaging. This marks the benchmark contrib also
as Java 1.5, as it depends on fast-vector-highlighter.<br /><span class="attrib">(Uwe Schindler)</span></li>
    </ol>
  </li>
</ul>
<h2><a id="older" href="javascript:toggleList('older')">Older Releases</a></h2>
<ul id="older.list">
<h3><a id="2.9.2" href="javascript:toggleList('2.9.2')">Release 2.9.2  [2010-02-26]</a></h3>
<ul id="2.9.2.list">
  <li><a id="2.9.2.bug_fixes" href="javascript:toggleList('2.9.2.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(11)
    <ol id="2.9.2.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2045">LUCENE-2045</a>: Fix silly FileNotFoundException hit if you enable
infoStream on IndexWriter and then add an empty document and commit<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2088">LUCENE-2088</a>: addAttribute() should only accept interfaces that
extend Attribute.<br /><span class="attrib">(Shai Erera, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2092">LUCENE-2092</a>: BooleanQuery was ignoring disableCoord in its hashCode
and equals methods, cause bad things to happen when caching
BooleanQueries.<br /><span class="attrib">(Chris Hostetter, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2095">LUCENE-2095</a>: Fixes: when two threads call IndexWriter.commit() at
the same time, it's possible for commit to return control back to
one of the threads before all changes are actually committed.<br /><span class="attrib">(Sanne Grinovero via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2166">LUCENE-2166</a>: Don't incorrectly keep warning about the same immense
 term, when IndexWriter.infoStream is on.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2158">LUCENE-2158</a>: At high indexing rates, NRT reader could temporarily
lose deletions.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2182">LUCENE-2182</a>: DEFAULT_ATTRIBUTE_FACTORY was failing to load
implementation class when interface was loaded by a different
class loader.<br /><span class="attrib">(Uwe Schindler, reported on java-user by Ahmed El-dawy)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2257">LUCENE-2257</a>: Increase max number of unique terms in one segment to
termIndexInterval (default 128) * ~2.1 billion = ~274 billion.<br /><span class="attrib">(Tom Burton-West via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2260">LUCENE-2260</a>: Fixed AttributeSource to not hold a strong
reference to the Attribute/AttributeImpl classes which prevents
unloading of custom attributes loaded by other classloaders
(e.g. in Solr plugins).<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1941">LUCENE-1941</a>: Fix Min/MaxPayloadFunction returns 0 when
only one payload is present.<br /><span class="attrib">(Erik Hatcher, Mike McCandless
via Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2270">LUCENE-2270</a>: Queries consisting of all zero-boost clauses
(for example, text:foo^0) sorted incorrectly and produced
invalid docids.<br /><span class="attrib">(yonik)</span></li>
    </ol>
  </li>
  <li><a id="2.9.2.api_changes" href="javascript:toggleList('2.9.2.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.9.2.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2190">LUCENE-2190</a>: Added a new class CustomScoreProvider to function package
that can be subclassed to provide custom scoring to CustomScoreQuery.
The methods in CustomScoreQuery that did this before were deprecated
and replaced by a method getCustomScoreProvider(IndexReader) that
returns a custom score implementation using the above class. The change
is necessary with per-segment searching, as CustomScoreQuery is
a stateless class (like all other Queries) and does not know about
the currently searched segment. This API works similar to Filter's
getDocIdSet(IndexReader).<br /><span class="attrib">(Paul chez Jamespot via Mike McCandless,
Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2080">LUCENE-2080</a>: Deprecate Version.LUCENE_CURRENT, as using this constant
will cause backwards compatibility problems when upgrading Lucene. See
the Version javadocs for additional information.<br /><span class="attrib">(Robert Muir)</span></li>
    </ol>
  </li>
  <li><a id="2.9.2.optimizations" href="javascript:toggleList('2.9.2.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.9.2.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2086">LUCENE-2086</a>: When resolving deleted terms, do so in term sort order
for better performance<br /><span class="attrib">(Bogdan Ghidireac via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2258">LUCENE-2258</a>: Remove unneeded synchronization in FuzzyTermEnum.<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
    </ol>
  </li>
  <li><a id="2.9.2.test_cases" href="javascript:toggleList('2.9.2.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.9.2.test_cases.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2114">LUCENE-2114</a>: Change TestFilteredSearch to test on multi-segment
index as well.<br /><span class="attrib">(Simon Willnauer via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2211">LUCENE-2211</a>: Improves BaseTokenStreamTestCase to use a fake attribute
that checks if clearAttributes() was called correctly.<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2207">LUCENE-2207</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-2219">LUCENE-2219</a>: Improve BaseTokenStreamTestCase to check if
end() is implemented correctly.<br /><span class="attrib">(Koji Sekiguchi, Robert Muir)</span></li>
    </ol>
  </li>
  <li><a id="2.9.2.documentation" href="javascript:toggleList('2.9.2.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.2.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2114">LUCENE-2114</a>: Improve javadocs of Filter to call out that the
provided reader is per-segment<br /><span class="attrib">(Simon Willnauer via Mike
McCandless)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.9.1" href="javascript:toggleList('2.9.1')">Release 2.9.1  [2009-11-06]</a></h3>
<ul id="2.9.1.list">
  <li><a id="2.9.1.changes_in_backwards_compatibility_policy" href="javascript:toggleList('2.9.1.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.9.1.changes_in_backwards_compatibility_policy.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2002">LUCENE-2002</a>: Add required Version matchVersion argument when
constructing QueryParser or MultiFieldQueryParser and, default (as
of 2.9) enablePositionIncrements to true to match
StandardAnalyzer's 2.9 default<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.1.bug_fixes" href="javascript:toggleList('2.9.1.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(8)
    <ol id="2.9.1.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1974">LUCENE-1974</a>: Fixed nasty bug in BooleanQuery (when it used
BooleanScorer for scoring), whereby some matching documents fail to
be collected.<br /><span class="attrib">(Fulin Tang via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1124">LUCENE-1124</a>: Make sure FuzzyQuery always matches the precise term.<br /><span class="attrib">(stefatwork@gmail.com via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1976">LUCENE-1976</a>: Fix IndexReader.isCurrent() to return the right thing
when the reader is a near real-time reader.<br /><span class="attrib">(Jake Mannix via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1986">LUCENE-1986</a>: Fix NPE when scoring PayloadNearQuery<br /><span class="attrib">(Peter Keegan,
Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1992">LUCENE-1992</a>: Fix thread hazard if a merge is committing just as an
exception occurs during sync<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1995">LUCENE-1995</a>: Note in javadocs that IndexWriter.setRAMBufferSizeMB
cannot exceed 2048 MB, and throw IllegalArgumentException if it
does.<br /><span class="attrib">(Aaron McKee, Yonik Seeley, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2004">LUCENE-2004</a>: Fix Constants.LUCENE_MAIN_VERSION to not be inlined
by client code.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2016">LUCENE-2016</a>: Replace illegal U+FFFF character with the replacement
char (U+FFFD) during indexing, to prevent silent index corruption.<br /><span class="attrib">(Peter Keegan, Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.1.api_changes" href="javascript:toggleList('2.9.1.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(4)
    <ol id="2.9.1.api_changes.list">
      <li>Un-deprecate search(Weight weight, Filter filter, int n) from
Searchable interface (deprecated by accident).<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li>Un-deprecate o.a.l.util.Version constants.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1987">LUCENE-1987</a>: Un-deprecate some ctors of Token, as they will not
be removed in 3.0 and are still useful. Also add some missing
o.a.l.util.Version constants for enabling invalid acronym
settings in StandardAnalyzer to be compatible with the coming
Lucene 3.0.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1973">LUCENE-1973</a>: Un-deprecate IndexSearcher.setDefaultFieldSortScoring,
to allow controlling per-IndexSearcher whether scores are computed
when sorting by field.<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.1.documentation" href="javascript:toggleList('2.9.1.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.9.1.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1955">LUCENE-1955</a>: Fix Hits deprecation notice to point users in right
direction.<br /><span class="attrib">(Mike McCandless, Mark Miller)</span></li>
      <li>Fix javadoc about score tracking done by search methods in Searcher
and IndexSearcher.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-2008">LUCENE-2008</a>: Javadoc improvements for TokenStream/Tokenizer/Token<br /><span class="attrib">(Luke Nezda via Mike McCandless)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.9.0" href="javascript:toggleList('2.9.0')">Release 2.9.0  [2009-09-23]</a></h3>
<ul id="2.9.0.list">
  <li><a id="2.9.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('2.9.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(8)
    <ol id="2.9.0.changes_in_backwards_compatibility_policy.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1575">LUCENE-1575</a>: Searchable.search(Weight, Filter, int, Sort) no
 longer computes a document score for each hit by default.  If
 document score tracking is still needed, you can call
 IndexSearcher.setDefaultFieldSortScoring(true, true) to enable
 both per-hit and maxScore tracking; however, this is deprecated
 and will be removed in 3.0.
<p/>
 Alternatively, use Searchable.search(Weight, Filter, Collector)
 and pass in a TopFieldCollector instance, using the following code
 sample:
<p/>
 <code><pre>
   TopFieldCollector tfc = TopFieldCollector.create(sort, numHits, fillFields,
                                                    true /* trackDocScores */,
                                                    true /* trackMaxScore */,
                                                    false /* docsInOrder */);
   searcher.search(query, tfc);
   TopDocs results = tfc.topDocs();</pre></code>
<p/>
 Note that your Sort object cannot use SortField.AUTO when you
 directly instantiate TopFieldCollector.
<p/>
 Also, the method search(Weight, Filter, Collector) was added to
 the Searchable interface and the Searcher abstract class to
 replace the deprecated HitCollector versions.  If you either
 implement Searchable or extend Searcher, you should change your
 code to implement this method.  If you already extend
 IndexSearcher, no further changes are needed to use Collector.
<p/>
 Finally, the values Float.NaN and Float.NEGATIVE_INFINITY are not
 valid scores.  Lucene uses these values internally in certain
 places, so if you have hits with such scores, it will cause
 problems.<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1687">LUCENE-1687</a>: All methods and parsers from the interface ExtendedFieldCache
 have been moved into FieldCache. ExtendedFieldCache is now deprecated and
 contains only a few declarations for binary backwards compatibility.
 ExtendedFieldCache will be removed in version 3.0. Users of FieldCache and
 ExtendedFieldCache will be able to plug in Lucene 2.9 without recompilation.
 The auto cache (FieldCache.getAuto) is now deprecated. Due to the merge of
 ExtendedFieldCache and FieldCache, FieldCache can now additionally return
 long[] and double[] arrays in addition to int[] and float[] and StringIndex.
<p/>
 The interface changes are only notable for users implementing the interfaces,
 which was unlikely done, because there is no possibility to change
 Lucene's FieldCache implementation.<br /><span class="attrib">(Grant Ingersoll, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1630">LUCENE-1630</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1771">LUCENE-1771</a>: Weight, previously an interface, is now an abstract
 class. Some of the method signatures have changed, but it should be fairly
 easy to see what adjustments must be made to existing code to sync up
 with the new API. You can find more detail in the API Changes section.
<p/>
 Going forward Searchable will be kept for convenience only and may
 be changed between minor releases without any deprecation
 process. It is not recommended that you implement it, but rather extend
 Searcher.<br /><span class="attrib">(Shai Erera, Chris Hostetter, Martin Ruckli, Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1422">LUCENE-1422</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1693">LUCENE-1693</a>: The new Attribute based TokenStream API (see below)
 has some backwards breaks in rare cases. We did our best to make the
 transition as easy as possible and you are not likely to run into any problems.
 If your tokenizers still implement next(Token) or next(), the calls are
 automatically wrapped. The indexer and query parser use the new API
 (eg use incrementToken() calls). All core TokenStreams are implemented using
 the new API. You can mix old and new API style TokenFilters/TokenStream.
 Problems only occur when you have done the following:
 You have overridden next(Token) or next() in one of the non-abstract core
 TokenStreams/-Filters. These classes should normally be final, but some
 of them are not. In this case, next(Token)/next() would never be called.
 To fail early with a hard compile/runtime error, the next(Token)/next()
 methods in these TokenStreams/-Filters were made final in this release.<br /><span class="attrib">(Michael Busch, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1763">LUCENE-1763</a>: MergePolicy now requires an IndexWriter instance to
 be passed upon instantiation. As a result, IndexWriter was removed
 as a method argument from all MergePolicy methods.<br /><span class="attrib">(Shai Erera via
 Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1748">LUCENE-1748</a>: <a href="http://issues.apache.org/jira/browse/LUCENE-1001">LUCENE-1001</a> introduced PayloadSpans, but this was a back
 compat break and caused custom SpanQuery implementations to fail at runtime
 in a variety of ways. This issue attempts to remedy things by causing
 a compile time break on custom SpanQuery implementations and removing
 the PayloadSpans class, with its functionality now moved to Spans. To
 help in alleviating future back compat pain, Spans has been changed from
 an interface to an abstract class.<br /><span class="attrib">(Hugh Cayless, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1808">LUCENE-1808</a>: Query.createWeight has been changed from protected to
 public. This will be a back compat break if you have overridden this
 method - but you are likely already affected by the <a href="http://issues.apache.org/jira/browse/LUCENE-1693">LUCENE-1693</a> (make Weight
 abstract rather than an interface) back compat break if you have overridden
 Query.creatWeight, so we have taken the opportunity to make this change.<br /><span class="attrib">(Tim Smith, Shai Erera via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1708">LUCENE-1708</a> - IndexReader.document() no longer checks if the document is
 deleted. You can call IndexReader.isDeleted(n) prior to calling document(n).<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.changes_in_runtime_behavior" href="javascript:toggleList('2.9.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(14)
    <ol id="2.9.0.changes_in_runtime_behavior.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1424">LUCENE-1424</a>: QueryParser now by default uses constant score auto
 rewriting when it generates a WildcardQuery and PrefixQuery (it
 already does so for TermRangeQuery, as well).  Call
 setMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE)
 to revert to slower BooleanQuery rewriting method.<br /><span class="attrib">(Mark Miller via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1575">LUCENE-1575</a>: As of 2.9, the core collectors as well as
 IndexSearcher's search methods that return top N results, no
 longer filter documents with scores &lt;= 0.0. If you rely on this
 functionality you can use PositiveScoresOnlyCollector like this:
<p/>
 <code><pre>
   TopDocsCollector tdc = new TopScoreDocCollector(10);
   Collector c = new PositiveScoresOnlyCollector(tdc);
   searcher.search(query, c);
   TopDocs hits = tdc.topDocs();
   ...</pre></code>
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1604">LUCENE-1604</a>: IndexReader.norms(String field) is now allowed to
 return null if the field has no norms, as long as you've
 previously called IndexReader.setDisableFakeNorms(true).  This
 setting now defaults to false (to preserve the fake norms back
 compatible behavior) but in 3.0 will be hardwired to true.<br /><span class="attrib">(Shon
 Vella via Mike McCandless)</span>.
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1624">LUCENE-1624</a>: If you open IndexWriter with create=true and
 autoCommit=false on an existing index, IndexWriter no longer
 writes an empty commit when it's created.<br /><span class="attrib">(Paul Taylor via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1593">LUCENE-1593</a>: When you call Sort() or Sort.setSort(String field,
 boolean reverse), the resulting SortField array no longer ends
 with SortField.FIELD_DOC (it was unnecessary as Lucene breaks ties
 internally by docID).<br /><span class="attrib">(Shai Erera via Michael McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1542">LUCENE-1542</a>: When the first token(s) have 0 position increment,
 IndexWriter used to incorrectly record the position as -1, if no
 payload is present, or Integer.MAX_VALUE if a payload is present.
 This causes positional queries to fail to match.  The bug is now
 fixed, but if your app relies on the buggy behavior then you must
 call IndexWriter.setAllowMinus1Position().  That API is deprecated
 so you must fix your application, and rebuild your index, to not
 rely on this behavior by the 3.0 release of Lucene.<br /><span class="attrib">(Jonathan
 Mamou, Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1715">LUCENE-1715</a>: Finalizers have been removed from the 4 core classes
 that still had them, since they will cause GC to take longer, thus
 tying up memory for longer, and at best they mask buggy app code.
 DirectoryReader (returned from IndexReader.open) &amp; IndexWriter
 previously released the write lock during finalize.
 SimpleFSDirectory.FSIndexInput closed the descriptor in its
 finalizer, and NativeFSLock released the lock.  It's possible
 applications will be affected by this, but only if the application
 is failing to close reader/writers.<br /><span class="attrib">(Brian Groose via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1717">LUCENE-1717</a>: Fixed IndexWriter to account for RAM usage of
 buffered deletions.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1727">LUCENE-1727</a>: Ensure that fields are stored &amp; retrieved in the
 exact order in which they were added to the document.  This was
 true in all Lucene releases before 2.3, but was broken in 2.3 and
 2.4, and is now fixed in 2.9.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1678">LUCENE-1678</a>: The addition of Analyzer.reusableTokenStream
 accidentally broke back compatibility of external analyzers that
 subclassed core analyzers that implemented tokenStream but not
 reusableTokenStream.  This is now fixed, such that if
 reusableTokenStream is invoked on such a subclass, that method
 will forcefully fallback to tokenStream.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1801">LUCENE-1801</a>: Token.clear() and Token.clearNoTermBuffer() now also clear
 startOffset, endOffset and type. This is not likely to affect any
 Tokenizer chains, as Tokenizers normally always set these three values.
 This change was made to be conform to the new AttributeImpl.clear() and
 AttributeSource.clearAttributes() to work identical for Token as one for all
 AttributeImpl and the 6 separate AttributeImpls.<br /><span class="attrib">(Uwe Schindler, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1483">LUCENE-1483</a>: When searching over multiple segments, a new Scorer is now created
 for each segment. Searching has been telescoped out a level and IndexSearcher now
 operates much like MultiSearcher does. The Weight is created only once for the top
 level Searcher, but each Scorer is passed a per-segment IndexReader. This will
 result in doc ids in the Scorer being internal to the per-segment IndexReader. It
 has always been outside of the API to count on a given IndexReader to contain every
 doc id in the index - and if you have been ignoring MultiSearcher in your custom code
 and counting on this fact, you will find your code no longer works correctly. If a
 custom Scorer implementation uses any caches/filters that rely on being based on the
 top level IndexReader, it will need to be updated to correctly use contextless
 caches/filters eg you can't count on the IndexReader to contain any given doc id or
 all of the doc ids.<br /><span class="attrib">(Mark Miller, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1846">LUCENE-1846</a>: DateTools now uses the US locale to format the numbers in its
 date/time strings instead of the default locale. For most locales there will
 be no change in the index format, as DateFormatSymbols is using ASCII digits.
 The usage of the US locale is important to guarantee correct ordering of
 generated terms.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1860">LUCENE-1860</a>: MultiTermQuery now defaults to
 CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method (previously it
 was SCORING_BOOLEAN_QUERY_REWRITE).  This means that PrefixQuery
 and WildcardQuery will now produce constant score for all matching
 docs, equal to the boost of the query.<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.api_changes" href="javascript:toggleList('2.9.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(38)
    <ol id="2.9.0.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1419">LUCENE-1419</a>: Add expert API to set custom indexing chain. This API is
package-protected for now, so we don't have to officially support it.
Yet, it will give us the possibility to try out different consumers
in the chain.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1427">LUCENE-1427</a>: DocIdSet.iterator() is now allowed to throw
IOException.<br /><span class="attrib">(Paul Elschot, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1422">LUCENE-1422</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1693">LUCENE-1693</a>: New TokenStream API that uses a new class called
AttributeSource instead of the Token class, which is now a utility class that
holds common Token attributes. All attributes that the Token class had have
been moved into separate classes: TermAttribute, OffsetAttribute,
PositionIncrementAttribute, PayloadAttribute, TypeAttribute and FlagsAttribute.
The new API is much more flexible; it allows to combine the Attributes
arbitrarily and also to define custom Attributes. The new API has the same
performance as the old next(Token) approach. For conformance with this new
API Tee-/SinkTokenizer was deprecated and replaced by a new TeeSinkTokenFilter.<br /><span class="attrib">(Michael Busch, Uwe Schindler; additional contributions and bug fixes by
Daniel Shane, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1467">LUCENE-1467</a>: Add nextDoc() and next(int) methods to OpenBitSetIterator.
These methods can be used to avoid additional calls to doc().<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1468">LUCENE-1468</a>: Deprecate Directory.list(), which sometimes (in
FSDirectory) filters out files that don't look like index files, in
favor of new Directory.listAll(), which does no filtering.  Also,
listAll() will never return null; instead, it throws an IOException
(or subclass).  Specifically, FSDirectory.listAll() will throw the
newly added NoSuchDirectoryException if the directory does not
exist.<br /><span class="attrib">(Marcel Reutegger, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1546">LUCENE-1546</a>: Add IndexReader.flush(Map commitUserData), allowing
you to record an opaque commitUserData (maps String -&gt; String) into
the commit written by IndexReader.  This matches IndexWriter's
commit methods.<br /><span class="attrib">(Jason Rutherglen via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-652">LUCENE-652</a>: Added org.apache.lucene.document.CompressionTools, to
enable compressing &amp; decompressing binary content, external to
Lucene's indexing.  Deprecated Field.Store.COMPRESS.
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1561">LUCENE-1561</a>: Renamed Field.omitTf to Field.omitTermFreqAndPositions<br /><span class="attrib">(Otis Gospodnetic via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1500">LUCENE-1500</a>: Added new InvalidTokenOffsetsException to Highlighter methods
 to denote issues when offsets in TokenStream tokens exceed the length of the
 provided text.<br /><span class="attrib">(Mark Harwood)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1575">LUCENE-1575</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1483">LUCENE-1483</a>: HitCollector is now deprecated in favor of
 a new Collector abstract class. For easy migration, people can use
 HitCollectorWrapper which translates (wraps) HitCollector into
 Collector. Note that this class is also deprecated and will be
 removed when HitCollector is removed.  Also TimeLimitedCollector
 is deprecated in favor of the new TimeLimitingCollector which
 extends Collector.<br /><span class="attrib">(Shai Erera, Mark Miller, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1592">LUCENE-1592</a>: The method TermsEnum.skipTo() was deprecated, because
 it is used nowhere in core/contrib and there is only a very ineffective
 default implementation available. If you want to position a TermEnum
 to another Term, create a new one using IndexReader.terms(Term).<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1621">LUCENE-1621</a>: MultiTermQuery.getTerm() has been deprecated as it does
 not make sense for all subclasses of MultiTermQuery. Check individual
 subclasses to see if they support getTerm().<br /><span class="attrib">(Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1636">LUCENE-1636</a>: Make TokenFilter.input final so it's set only
 once.<br /><span class="attrib">(Wouter Heijke, Uwe Schindler via Mike McCandless)</span>.
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1658">LUCENE-1658</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1451">LUCENE-1451</a>: Renamed FSDirectory to SimpleFSDirectory
 (but left an FSDirectory base class).  Added an FSDirectory.open
 static method to pick a good default FSDirectory implementation
 given the OS. FSDirectories should now be instantiated using
 FSDirectory.open or with public constructors rather than
 FSDirectory.getDirectory(), which has been deprecated.<br /><span class="attrib">(Michael McCandless, Uwe Schindler, yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1665">LUCENE-1665</a>: Deprecate SortField.AUTO, to be removed in 3.0.
 Instead, when sorting by field, the application should explicitly
 state the type of the field.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1660">LUCENE-1660</a>: StopFilter, StandardAnalyzer, StopAnalyzer now
 require up front specification of enablePositionIncrement<br /><span class="attrib">(Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1614">LUCENE-1614</a>: DocIdSetIterator's next() and skipTo() were deprecated in favor
 of the new nextDoc() and advance(). The new methods return the doc Id they
 landed on, saving an extra call to doc() in most cases.
 For easy migration of the code, you can change the calls to next() to
 nextDoc() != DocIdSetIterator.NO_MORE_DOCS and similarly for skipTo().
 However it is advised that you take advantage of the returned doc ID and not
 call doc() following those two.
 Also, doc() was deprecated in favor of docID(). docID() should return -1 or
 NO_MORE_DOCS if nextDoc/advance were not called yet, or NO_MORE_DOCS if the
 iterator has exhausted. Otherwise it should return the current doc ID.<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1672">LUCENE-1672</a>: All ctors/opens and other methods using String/File to
 specify the directory in IndexReader, IndexWriter, and IndexSearcher
 were deprecated. You should instantiate the Directory manually before
 and pass it to these classes (<a href="http://issues.apache.org/jira/browse/LUCENE-1451">LUCENE-1451</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1658">LUCENE-1658</a>).<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1407">LUCENE-1407</a>: Move RemoteSearchable, RemoteCachingWrapperFilter out
 of Lucene's core into new contrib/remote package.  Searchable no
 longer extends java.rmi.Remote<br /><span class="attrib">(Simon Willnauer via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1677">LUCENE-1677</a>: The global property
 org.apache.lucene.SegmentReader.class, and
 ReadOnlySegmentReader.class are now deprecated, to be removed in
 3.0.  src/gcj/* has been removed.<br /><span class="attrib">(Earwin Burrfoot via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1673">LUCENE-1673</a>: Deprecated NumberTools in favour of the new
 NumericRangeQuery and its new indexing format for numeric or
 date values.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1630">LUCENE-1630</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1771">LUCENE-1771</a>: Weight is now an abstract class, and adds
 a scorer(IndexReader, boolean /* scoreDocsInOrder */, boolean /*
 topScorer */) method instead of scorer(IndexReader). IndexSearcher uses
 this method to obtain a scorer matching the capabilities of the Collector
 wrt orderedness of docIDs. Some Scorers (like BooleanScorer) are much more
 efficient if out-of-order documents scoring is allowed by a Collector.
 Collector must now implement acceptsDocsOutOfOrder. If you write a
 Collector which does not care about doc ID orderness, it is recommended
 that you return true.  Weight has a scoresDocsOutOfOrder method, which by
 default returns false.  If you create a Weight which will score documents
 out of order if requested, you should override that method to return true.
 BooleanQuery's setAllowDocsOutOfOrder and getAllowDocsOutOfOrder have been
 deprecated as they are not needed anymore. BooleanQuery will now score docs
 out of order when used with a Collector that can accept docs out of order.
 Finally, Weight#explain now takes a sub-reader and sub-docID, rather than
 a top level reader and docID.<br /><span class="attrib">(Shai Erera, Chris Hostetter, Martin Ruckli, Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1466">LUCENE-1466</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1906">LUCENE-1906</a>: Added CharFilter and MappingCharFilter, which allows
 chaining &amp; mapping of characters before tokenizers run. CharStream (subclass of
 Reader) is the base class for custom java.io.Reader's, that support offset
 correction. Tokenizers got an additional method correctOffset() that is passed
 down to the underlying CharStream if input is a subclass of CharStream/-Filter.<br /><span class="attrib">(Koji Sekiguchi via Mike McCandless, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1703">LUCENE-1703</a>: Add IndexWriter.waitForMerges.<br /><span class="attrib">(Tim Smith via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1625">LUCENE-1625</a>: CheckIndex's programmatic API now returns separate
 classes detailing the status of each component in the index, and
 includes more detailed status than previously.<br /><span class="attrib">(Tim Smith via
 Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1713">LUCENE-1713</a>: Deprecated RangeQuery and RangeFilter and renamed to
 TermRangeQuery and TermRangeFilter. TermRangeQuery is in constant
 score auto rewrite mode by default. The new classes also have new
 ctors taking field and term ranges as Strings (see also
 <a href="http://issues.apache.org/jira/browse/LUCENE-1424">LUCENE-1424</a>).<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1609">LUCENE-1609</a>: The termInfosIndexDivisor must now be specified
 up-front when opening the IndexReader.  Attempts to call
 IndexReader.setTermInfosIndexDivisor will hit an
 UnsupportedOperationException.  This was done to enable removal of
 all synchronization in TermInfosReader, which previously could
 cause threads to pile up in certain cases.<br /><span class="attrib">(Dan Rosher via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1688">LUCENE-1688</a>: Deprecate static final String stop word array in and
 StopAnalzyer and replace it with an immutable implementation of
 CharArraySet.<br /><span class="attrib">(Simon Willnauer via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1742">LUCENE-1742</a>: SegmentInfos, SegmentInfo and SegmentReader have been
 made public as expert, experimental APIs.  These APIs may suddenly
 change from release to release<br /><span class="attrib">(Jason Rutherglen via Mike
 McCandless)</span>.
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1754">LUCENE-1754</a>: QueryWeight.scorer() can return null if no documents
 are going to be matched by the query. Similarly,
 Filter.getDocIdSet() can return null if no documents are going to
 be accepted by the Filter. Note that these 'can' return null,
 however they don't have to and can return a Scorer/DocIdSet which
 does not match / reject all documents.  This is already the
 behavior of some QueryWeight/Filter implementations, and is
 documented here just for emphasis.<br /><span class="attrib">(Shai Erera via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1705">LUCENE-1705</a>: Added IndexWriter.deleteAllDocuments.<br /><span class="attrib">(Tim Smith via
 Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1460">LUCENE-1460</a>: Changed TokenStreams/TokenFilters in contrib to
 use the new TokenStream API.<br /><span class="attrib">(Robert Muir, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1748">LUCENE-1748</a>: <a href="http://issues.apache.org/jira/browse/LUCENE-1001">LUCENE-1001</a> introduced PayloadSpans, but this was a back
 compat break and caused custom SpanQuery implementations to fail at runtime
 in a variety of ways. This issue attempts to remedy things by causing
 a compile time break on custom SpanQuery implementations and removing
 the PayloadSpans class, with its functionality now moved to Spans. To
 help in alleviating future back compat pain, Spans has been changed from
 an interface to an abstract class.<br /><span class="attrib">(Hugh Cayless, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1808">LUCENE-1808</a>: Query.createWeight has been changed from protected to
 public.<br /><span class="attrib">(Tim Smith, Shai Erera via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1826">LUCENE-1826</a>: Add constructors that take AttributeSource and
 AttributeFactory to all Tokenizer implementations.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1847">LUCENE-1847</a>: Similarity#idf for both a Term and Term Collection have
 been deprecated. New versions that return an IDFExplanation have been
 added.<br /><span class="attrib">(Yasoja Seneviratne, Mike McCandless, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1877">LUCENE-1877</a>: Made NativeFSLockFactory the default for
 the new FSDirectory API (open(), FSDirectory subclass ctors).
 All FSDirectory system properties were deprecated and all lock
 implementations use no lock prefix if the locks are stored inside
 the index directory. Because the deprecated String/File ctors of
 IndexWriter and IndexReader (<a href="http://issues.apache.org/jira/browse/LUCENE-1672">LUCENE-1672</a>) and FSDirectory.getDirectory()
 still use the old SimpleFSLockFactory and the new API
 NativeFSLockFactory, we strongly recommend not to mix deprecated
 and new API.<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1911">LUCENE-1911</a>: Added a new method isCacheable() to DocIdSet. This method
 should return true, if the underlying implementation does not use disk
 I/O and is fast enough to be directly cached by CachingWrapperFilter.
 OpenBitSet, SortedVIntList, and DocIdBitSet are such candidates.
 The default implementation of the abstract DocIdSet class returns false.
 In this case, CachingWrapperFilter copies the DocIdSetIterator into an
 OpenBitSet for caching.<br /><span class="attrib">(Uwe Schindler, Thomas Becker)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.bug_fixes" href="javascript:toggleList('2.9.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(26)
    <ol id="2.9.0.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1415">LUCENE-1415</a>: MultiPhraseQuery has incorrect hashCode() and equals()
implementation - Leads to Solr Cache misses.<br /><span class="attrib">(Todd Feak, Mark Miller via yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1327">LUCENE-1327</a>: Fix TermSpans#skipTo() to behave as specified in javadocs
of Terms#skipTo().<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1573">LUCENE-1573</a>: Do not ignore InterruptedException (caused by
Thread.interrupt()) nor enter deadlock/spin loop. Now, an interrupt
will cause a RuntimeException to be thrown.  In 3.0 we will change
public APIs to throw InterruptedException.<br /><span class="attrib">(Jeremy Volkman via
Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1590">LUCENE-1590</a>: Fixed stored-only Field instances do not change the
value of omitNorms, omitTermFreqAndPositions in FieldInfo; when you
retrieve such fields they will now have omitNorms=true and
omitTermFreqAndPositions=false (though these values are unused).<br /><span class="attrib">(Uwe Schindler via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1587">LUCENE-1587</a>: RangeQuery#equals() could consider a RangeQuery
without a collator equal to one with a collator.<br /><span class="attrib">(Mark Platvoet via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1600">LUCENE-1600</a>: Don't call String.intern unnecessarily in some cases
when loading documents from the index.<br /><span class="attrib">(P Eger via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1611">LUCENE-1611</a>: Fix case where OutOfMemoryException in IndexWriter
could cause "infinite merging" to happen.<br /><span class="attrib">(Christiaan Fluit via
Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1623">LUCENE-1623</a>: Properly handle back-compatibility of 2.3.x indexes that
contain field names with non-ascii characters.<br /><span class="attrib">(Mike Streeton via
Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1593">LUCENE-1593</a>: MultiSearcher and ParallelMultiSearcher did not break ties (in
sort) by doc Id in a consistent manner (i.e., if Sort.FIELD_DOC was used vs.
when it wasn't).<br /><span class="attrib">(Shai Erera via Michael McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1647">LUCENE-1647</a>: Fix case where IndexReader.undeleteAll would cause
 the segment's deletion count to be incorrect.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1542">LUCENE-1542</a>: When the first token(s) have 0 position increment,
 IndexWriter used to incorrectly record the position as -1, if no
 payload is present, or Integer.MAX_VALUE if a payload is present.
 This causes positional queries to fail to match.  The bug is now
 fixed, but if your app relies on the buggy behavior then you must
 call IndexWriter.setAllowMinus1Position().  That API is deprecated
 so you must fix your application, and rebuild your index, to not
 rely on this behavior by the 3.0 release of Lucene.<br /><span class="attrib">(Jonathan
 Mamou, Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1658">LUCENE-1658</a>: Fixed MMapDirectory to correctly throw IOExceptions
 on EOF, removed numeric overflow possibilities and added support
 for a hack to unmap the buffers on closing IndexInput.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1681">LUCENE-1681</a>: Fix infinite loop caused by a call to DocValues methods
 getMinValue, getMaxValue, getAverageValue.<br /><span class="attrib">(Simon Willnauer via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1599">LUCENE-1599</a>: Add clone support for SpanQuerys. SpanRegexQuery counts
 on this functionality and does not work correctly without it.<br /><span class="attrib">(Billow Gao, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1718">LUCENE-1718</a>: Fix termInfosIndexDivisor to carry over to reopened
 readers<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1583">LUCENE-1583</a>: SpanOrQuery skipTo() doesn't always move forwards as Spans
	documentation indicates it should.<br /><span class="attrib">(Moti Nisenson via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1566">LUCENE-1566</a>: Sun JVM Bug
 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6478546 causes
 invalid OutOfMemoryError when reading too many bytes at once from
 a file on 32bit JVMs that have a large maximum heap size.  This
 fix adds set/getReadChunkSize to FSDirectory so that large reads
 are broken into chunks, to work around this JVM bug.  On 32bit
 JVMs the default chunk size is 100 MB; on 64bit JVMs, which don't
 show the bug, the default is Integer.MAX_VALUE.<br /><span class="attrib">(Simon Willnauer
 via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1448">LUCENE-1448</a>: Added TokenStream.end() to perform end-of-stream
 operations (ie to return the end offset of the tokenization).
 This is important when multiple fields with the same name are added
 to a document, to ensure offsets recorded in term vectors for all
 of the instances are correct.<br /><span class="attrib">(Mike McCandless, Mark Miller, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1805">LUCENE-1805</a>: CloseableThreadLocal did not allow a null Object in get(),
 although it does allow it in set(Object). Fix get() to not assert the object
 is not null.<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1801">LUCENE-1801</a>: Changed all Tokenizers or TokenStreams in core/contrib)
 that are the source of Tokens to always call
 AttributeSource.clearAttributes() first.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1819">LUCENE-1819</a>: MatchAllDocsQuery.toString(field) should produce output
 that is parsable by the QueryParser.<br /><span class="attrib">(John Wang, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1836">LUCENE-1836</a>: Fix localization bug in the new query parser and add
 new LocalizedTestCase as base class for localization junit tests.<br /><span class="attrib">(Robert Muir, Uwe Schindler via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1847">LUCENE-1847</a>: PhraseQuery/TermQuery/SpanQuery use IndexReader specific stats
 in their Weight#explain methods - these stats should be corpus wide.<br /><span class="attrib">(Yasoja Seneviratne, Mike McCandless, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1885">LUCENE-1885</a>: Fix the bug that NativeFSLock.isLocked() did not work,
 if the lock was obtained by another NativeFSLock(Factory) instance.
 Because of this IndexReader.isLocked() and IndexWriter.isLocked() did
 not work correctly.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1899">LUCENE-1899</a>: Fix O(N^2) CPU cost when setting docIDs in order in an
 OpenBitSet, due to an inefficiency in how the underlying storage is
 reallocated.<br /><span class="attrib">(Nadav Har'El via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1918">LUCENE-1918</a>: Fixed cases where a ParallelReader would
generate exceptions on being passed to
IndexWriter.addIndexes(IndexReader[]).  First case was when the
ParallelReader was empty.  Second case was when the ParallelReader
used to contain documents with TermVectors, but all such documents
have been deleted.<br /><span class="attrib">(Christian Kohlschütter via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.new_features" href="javascript:toggleList('2.9.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(36)
    <ol id="2.9.0.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1411">LUCENE-1411</a>: Added expert API to open an IndexWriter on a prior
 commit, obtained from IndexReader.listCommits.  This makes it
 possible to rollback changes to an index even after you've closed
 the IndexWriter that made the changes, assuming you are using an
 IndexDeletionPolicy that keeps past commits around.  This is useful
 when building transactional support on top of Lucene.<br /><span class="attrib">(Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1382">LUCENE-1382</a>: Add an optional arbitrary Map (String -&gt; String)
 "commitUserData" to IndexWriter.commit(), which is stored in the
 segments file and is then retrievable via
 IndexReader.getCommitUserData instance and static methods.<br /><span class="attrib">(Shalin Shekhar Mangar via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1420">LUCENE-1420</a>: Similarity now has a computeNorm method that allows
 custom Similarity classes to override how norm is computed.  It's
 provided a FieldInvertState instance that contains details from
 inverting the field.  The default impl is boost *
 lengthNorm(numTerms), to be backwards compatible.  Also added
 {set/get}DiscountOverlaps to DefaultSimilarity, to control whether
 overlapping tokens (tokens with 0 position increment) should be
 counted in lengthNorm.<br /><span class="attrib">(Andrzej Bialecki via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1424">LUCENE-1424</a>: Moved constant score query rewrite capability into
 MultiTermQuery, allowing TermRangeQuery, PrefixQuery and WildcardQuery
 to switch between constant-score rewriting or BooleanQuery
 expansion rewriting via a new setRewriteMethod method.
 Deprecated ConstantScoreRangeQuery<br /><span class="attrib">(Mark Miller via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1461">LUCENE-1461</a>: Added FieldCacheRangeFilter, a RangeFilter for
 single-term fields that uses FieldCache to compute the filter.  If
 your documents all have a single term for a given field, and you
 need to create many RangeFilters with varying lower/upper bounds,
 then this is likely a much faster way to create the filters than
 RangeFilter.  FieldCacheRangeFilter allows ranges on all data types,
 FieldCache supports (term ranges, byte, short, int, long, float, double).
 However, it comes at the expense of added RAM consumption and slower
 first-time usage due to populating the FieldCache.  It also does not
 support collation<br /><span class="attrib">(Tim Sturge, Matt Ericson via Mike McCandless and
 Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1296">LUCENE-1296</a>: add protected method CachingWrapperFilter.docIdSetToCache
 to allow subclasses to choose which DocIdSet implementation to use<br /><span class="attrib">(Paul Elschot via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1390">LUCENE-1390</a>: Added ASCIIFoldingFilter, a Filter that converts
 alphabetic, numeric, and symbolic Unicode characters which are not in
 the first 127 ASCII characters (the "Basic Latin" Unicode block) into
 their ASCII equivalents, if one exists. ISOLatin1AccentFilter, which
 handles a subset of this filter, has been deprecated.<br /><span class="attrib">(Andi Vajda, Steven Rowe via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1478">LUCENE-1478</a>: Added new SortField constructor allowing you to
 specify a custom FieldCache parser to generate numeric values from
 terms for a field.<br /><span class="attrib">(Uwe Schindler via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1528">LUCENE-1528</a>: Add support for Ideographic Space to the queryparser.<br /><span class="attrib">(Luis Alves via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1487">LUCENE-1487</a>: Added FieldCacheTermsFilter, to filter by multiple
 terms on single-valued fields.  The filter loads the FieldCache
 for the field the first time it's called, and subsequent usage of
 that field, even with different Terms in the filter, are fast.<br /><span class="attrib">(Tim Sturge, Shalin Shekhar Mangar via Mike McCandless)</span>.
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1314">LUCENE-1314</a>: Add clone(), clone(boolean readOnly) and
 reopen(boolean readOnly) to IndexReader.  Cloning an IndexReader
 gives you a new reader which you can make changes to (deletions,
 norms) without affecting the original reader.  Now, with clone or
 reopen you can change the readOnly of the original reader.<br /><span class="attrib">(Jason
 Rutherglen, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1506">LUCENE-1506</a>: Added FilteredDocIdSet, an abstract class which you
 subclass to implement the "match" method to accept or reject each
 docID.  Unlike ChainedFilter (under contrib/misc),
 FilteredDocIdSet never requires you to materialize the full
 bitset.  Instead, match() is called on demand per docID.<br /><span class="attrib">(John
 Wang via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1398">LUCENE-1398</a>: Add ReverseStringFilter to contrib/analyzers, a filter
 to reverse the characters in each token.<br /><span class="attrib">(Koji Sekiguchi via yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1551">LUCENE-1551</a>: Add expert IndexReader.reopen(IndexCommit) to allow
 efficiently opening a new reader on a specific commit, sharing
 resources with the original reader.<br /><span class="attrib">(Torin Danil via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1434">LUCENE-1434</a>: Added org.apache.lucene.util.IndexableBinaryStringTools,
 to encode byte[] as String values that are valid terms, and
 maintain sort order of the original byte[] when the bytes are
 interpreted as unsigned.<br /><span class="attrib">(Steven Rowe via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1543">LUCENE-1543</a>: Allow MatchAllDocsQuery to optionally use norms from
 a specific fields to set the score for a document.<br /><span class="attrib">(Karl Wettin
 via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1586">LUCENE-1586</a>: Add IndexReader.getUniqueTermCount().<br /><span class="attrib">(Mike
 McCandless via Derek)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1516">LUCENE-1516</a>: Added "near real-time search" to IndexWriter, via a
 new expert getReader() method.  This method returns a reader that
 searches the full index, including any uncommitted changes in the
 current IndexWriter session.  This should result in a faster
 turnaround than the normal approach of commiting the changes and
 then reopening a reader.<br /><span class="attrib">(Jason Rutherglen via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1603">LUCENE-1603</a>: Added new MultiTermQueryWrapperFilter, to wrap any
 MultiTermQuery as a Filter.  Also made some improvements to
 MultiTermQuery: return DocIdSet.EMPTY_DOCIDSET if there are no
 terms in the enum; track the total number of terms it visited
 during rewrite (getTotalNumberOfTerms).  FilteredTermEnum is also
 more friendly to subclassing.<br /><span class="attrib">(Uwe Schindler via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1605">LUCENE-1605</a>: Added BitVector.subset().<br /><span class="attrib">(Jeremy Volkman via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1618">LUCENE-1618</a>: Added FileSwitchDirectory that enables files with
 specified extensions to be stored in a primary directory and the
 rest of the files to be stored in the secondary directory.  For
 example, this can be useful for the large doc-store (stored
 fields, term vectors) files in FSDirectory and the rest of the
 index files in a RAMDirectory.<br /><span class="attrib">(Jason Rutherglen via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1494">LUCENE-1494</a>: Added FieldMaskingSpanQuery which can be used to
 cross-correlate Spans from different fields.<br /><span class="attrib">(Paul Cowan and Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1634">LUCENE-1634</a>: Add calibrateSizeByDeletes to LogMergePolicy, to take
 deletions into account when considering merges.<br /><span class="attrib">(Yasuhiro Matsuda
 via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1550">LUCENE-1550</a>: Added new n-gram based String distance measure for spell checking.
 See the Javadocs for NGramDistance.java for a reference paper on why
 this is helpful<br /><span class="attrib">(Tom Morton via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1470">LUCENE-1470</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1582">LUCENE-1582</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1602">LUCENE-1602</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1673">LUCENE-1673</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1701">LUCENE-1701</a>, <a href="http://issues.apache.org/jira/browse/LUCENE-1712">LUCENE-1712</a>:
 Added NumericRangeQuery and NumericRangeFilter, a fast alternative to
 RangeQuery/RangeFilter for numeric searches. They depend on a specific
 structure of terms in the index that can be created by indexing
 using the new NumericField or NumericTokenStream classes. NumericField
 can only be used for indexing and optionally stores the values as
 string representation in the doc store. Documents returned from
 IndexReader/IndexSearcher will return only the String value using
 the standard Fieldable interface. NumericFields can be sorted on
 and loaded into the FieldCache.<br /><span class="attrib">(Uwe Schindler, Yonik Seeley,
 Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1405">LUCENE-1405</a>: Added support for Ant resource collections in contrib/ant
 &lt;index&gt; task.<br /><span class="attrib">(Przemyslaw Sztoch via Erik Hatcher)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1699">LUCENE-1699</a>: Allow setting a TokenStream on Field/Fieldable for indexing
 in conjunction with any other ways to specify stored field values,
 currently binary or string values.<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1701">LUCENE-1701</a>: Made the standard FieldCache.Parsers public and added
 parsers for fields generated using NumericField/NumericTokenStream.
 All standard parsers now also implement Serializable and enforce
 their singleton status.<br /><span class="attrib">(Uwe Schindler, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1741">LUCENE-1741</a>: User configurable maximum chunk size in MMapDirectory.
 On 32 bit platforms, the address space can be very fragmented, so
 one big ByteBuffer for the whole file may not fit into address space.<br /><span class="attrib">(Eks Dev via Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1644">LUCENE-1644</a>: Enable 4 rewrite modes for queries deriving from
 MultiTermQuery (WildcardQuery, PrefixQuery, TermRangeQuery,
 NumericRangeQuery): CONSTANT_SCORE_FILTER_REWRITE first creates a
 filter and then assigns constant score (boost) to docs;
 CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE create a BooleanQuery but
 uses a constant score (boost); SCORING_BOOLEAN_QUERY_REWRITE also
 creates a BooleanQuery but keeps the BooleanQuery's scores;
 CONSTANT_SCORE_AUTO_REWRITE tries to pick the most performant
 constant-score rewrite method.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1448">LUCENE-1448</a>: Added TokenStream.end(), to perform end-of-stream
 operations.  This is currently used to fix offset problems when
 multiple fields with the same name are added to a document.<br /><span class="attrib">(Mike McCandless, Mark Miller, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1776">LUCENE-1776</a>: Add an option to not collect payloads for an ordered
 SpanNearQuery. Payloads were not lazily loaded in this case as
 the javadocs implied. If you have payloads and want to use an ordered
 SpanNearQuery that does not need to use the payloads, you can
 disable loading them with a new constructor switch.<br /><span class="attrib">(Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1341">LUCENE-1341</a>: Added PayloadNearQuery to enable SpanNearQuery functionality
 with payloads<br /><span class="attrib">(Peter Keegan, Grant Ingersoll, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1790">LUCENE-1790</a>: Added PayloadTermQuery to enable scoring of payloads
 based on the maximum payload seen for a document.
 Slight refactoring of Similarity and other payload queries<br /><span class="attrib">(Grant Ingersoll, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1749">LUCENE-1749</a>: Addition of FieldCacheSanityChecker utility, and
 hooks to use it in all existing Lucene Tests.  This class can
 be used by any application to inspect the FieldCache and provide
 diagnostic information about the possibility of inconsistent
 FieldCache usage.  Namely: FieldCache entries for the same field
 with different datatypes or parsers; and FieldCache entries for
 the same field in both a reader, and one of it's (descendant) sub
 readers.<br /><span class="attrib">(Chris Hostetter, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1789">LUCENE-1789</a>: Added utility class
 oal.search.function.MultiValueSource to ease the transition to
 segment based searching for any apps that directly call
 oal.search.function.* APIs.  This class wraps any other
 ValueSource, but takes care when composite (multi-segment) are
 passed to not double RAM usage in the FieldCache.<br /><span class="attrib">(Chris
 Hostetter, Mark Miller, Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.optimizations" href="javascript:toggleList('2.9.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(13)
    <ol id="2.9.0.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1427">LUCENE-1427</a>: Fixed QueryWrapperFilter to not waste time computing
 scores of the query, since they are just discarded.  Also, made it
 more efficient (single pass) by not creating &amp; populating an
 intermediate OpenBitSet<br /><span class="attrib">(Paul Elschot, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1443">LUCENE-1443</a>: Performance improvement for OpenBitSetDISI.inPlaceAnd()<br /><span class="attrib">(Paul Elschot via yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1484">LUCENE-1484</a>: Remove synchronization of IndexReader.document() by
 using CloseableThreadLocal internally.<br /><span class="attrib">(Jason Rutherglen via Mike
 McCandless)</span>.
<p/>
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1124">LUCENE-1124</a>: Short circuit FuzzyQuery.rewrite when input token length
 is small compared to minSimilarity.<br /><span class="attrib">(Timo Nentwig, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1316">LUCENE-1316</a>: MatchAllDocsQuery now avoids the synchronized
 IndexReader.isDeleted() call per document, by directly accessing
 the underlying deleteDocs BitVector.  This improves performance
 with non-readOnly readers, especially in a multi-threaded
 environment.<br /><span class="attrib">(Todd Feak, Yonik Seeley, Jason Rutherglen via Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1483">LUCENE-1483</a>: When searching over multiple segments we now visit
 each sub-reader one at a time.  This speeds up warming, since
 FieldCache entries (if required) can be shared across reopens for
 those segments that did not change, and also speeds up searches
 that sort by relevance or by field values.<br /><span class="attrib">(Mark Miller, Mike
 McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1575">LUCENE-1575</a>: The new Collector class decouples collect() from
 score computation.  Collector.setScorer is called to establish the
 current Scorer in-use per segment.  Collectors that require the
 score should then call Scorer.score() per hit inside
 collect().<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1596">LUCENE-1596</a>: MultiTermDocs speedup when set with
 MultiTermDocs.seek(MultiTermEnum)<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1653">LUCENE-1653</a>: Avoid creating a Calendar in every call to
 DateTools#dateToString, DateTools#timeToString and
 DateTools#round.<br /><span class="attrib">(Shai Erera via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1688">LUCENE-1688</a>: Deprecate static final String stop word array and
 replace it with an immutable implementation of CharArraySet.
 Removes conversions between Set and array.<br /><span class="attrib">(Simon Willnauer via Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1754">LUCENE-1754</a>: BooleanQuery.queryWeight.scorer() will return null if
 it won't match any documents (e.g. if there are no required and
 optional scorers, or not enough optional scorers to satisfy
 minShouldMatch).<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1607">LUCENE-1607</a>: To speed up string interning for commonly used
 strings, the StringHelper.intern() interface was added with a
 default implementation that uses a lockless cache.<br /><span class="attrib">(Earwin Burrfoot, yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1800">LUCENE-1800</a>: QueryParser should use reusable TokenStreams.<br /><span class="attrib">(yonik)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.documentation" href="javascript:toggleList('2.9.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(9)
    <ol id="2.9.0.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1908">LUCENE-1908</a>: Scoring documentation imrovements in Similarity javadocs.<br /><span class="attrib">(Mark Miller, Shai Erera, Ted Dunning, Jiri Kuhn, Marvin Humphrey, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1872">LUCENE-1872</a>: NumericField javadoc improvements<br /><span class="attrib">(Michael McCandless, Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1875">LUCENE-1875</a>: Make TokenStream.end javadoc less confusing.<br /><span class="attrib">(Uwe Schindler)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1862">LUCENE-1862</a>: Rectified duplicate package level javadocs for
 o.a.l.queryParser and o.a.l.analysis.cn.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1886">LUCENE-1886</a>: Improved hyperlinking in key Analysis javadocs<br /><span class="attrib">(Bernd Fondermann via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1884">LUCENE-1884</a>: massive javadoc and comment cleanup, primarily dealing with
 typos.<br /><span class="attrib">(Robert Muir via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1898">LUCENE-1898</a>: Switch changes to use bullets rather than numbers and
 update changes-to-html script to handle the new format.<br /><span class="attrib">(Steven Rowe, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1900">LUCENE-1900</a>: Improve Searchable Javadoc.<br /><span class="attrib">(Nadav Har'El, Doron Cohen, Marvin Humphrey, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1896">LUCENE-1896</a>: Improve Similarity#queryNorm javadocs.<br /><span class="attrib">(Jiri Kuhn, Mark Miller)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.build" href="javascript:toggleList('2.9.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(5)
    <ol id="2.9.0.build.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1440">LUCENE-1440</a>: Add new targets to build.xml that allow downloading
 and executing the junit testcases from an older release for
 backwards-compatibility testing.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1446">LUCENE-1446</a>: Add compatibility tag to common-build.xml and run
 backwards-compatibility tests in the nightly build.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1529">LUCENE-1529</a>: Properly test "drop-in" replacement of jar with
 backwards-compatibility tests.<br /><span class="attrib">(Mike McCandless, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1851">LUCENE-1851</a>: Change 'javacc' and 'clean-javacc' targets to build
 and clean contrib/surround files.<br /><span class="attrib">(Luis Alves via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1854">LUCENE-1854</a>: tar task should use longfile="gnu" to avoid false file
 name length warnings.<br /><span class="attrib">(Mark Miller)</span></li>
    </ol>
  </li>
  <li><a id="2.9.0.test_cases" href="javascript:toggleList('2.9.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(4)
    <ol id="2.9.0.test_cases.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1791">LUCENE-1791</a>: Enhancements to the QueryUtils and CheckHits utility
 classes to wrap IndexReaders and Searchers in MultiReaders or
 MultiSearcher when possible to help exercise more edge cases.<br /><span class="attrib">(Chris Hostetter, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1852">LUCENE-1852</a>: Fix localization test failures.<br /><span class="attrib">(Robert Muir via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1843">LUCENE-1843</a>: Refactored all tests that use assertAnalyzesTo() &amp; others
 in core and contrib to use a new BaseTokenStreamTestCase
 base class. Also rewrote some tests to use this general analysis assert
 functions instead of own ones (e.g. TestMappingCharFilter).
 The new base class also tests tokenization with the TokenStream.next()
 backwards layer enabled (using Token/TokenWrapper as attribute
 implementation) and disabled (default for Lucene 3.0)<br /><span class="attrib">(Uwe Schindler, Robert Muir)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1836">LUCENE-1836</a>: Added a new LocalizedTestCase as base class for localization
 junit tests.<br /><span class="attrib">(Robert Muir, Uwe Schindler via Michael Busch)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.4.1" href="javascript:toggleList('2.4.1')">Release 2.4.1  [2009-03-09]</a></h3>
<ul id="2.4.1.list">
  <li><a id="2.4.1.api_changes" href="javascript:toggleList('2.4.1.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.4.1.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1186">LUCENE-1186</a>: Add Analyzer.close() to free internal ThreadLocal
resources.<br /><span class="attrib">(Christian Kohlschütter via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.4.1.bug_fixes" href="javascript:toggleList('2.4.1.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(15)
    <ol id="2.4.1.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1452">LUCENE-1452</a>: Fixed silent data-loss case whereby binary fields are
truncated to 0 bytes during merging if the segments being merged
are non-congruent (same field name maps to different field
numbers).  This bug was introduced with <a href="http://issues.apache.org/jira/browse/LUCENE-1219">LUCENE-1219</a>.<br /><span class="attrib">(Andrzej
Bialecki via Mike McCandless)</span>.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1429">LUCENE-1429</a>: Don't throw incorrect IllegalStateException from
IndexWriter.close() if you've hit an OOM when autoCommit is true.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1474">LUCENE-1474</a>: If IndexReader.flush() is called twice when there were
pending deletions, it could lead to later false AssertionError
during IndexReader.open.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1430">LUCENE-1430</a>: Fix false AlreadyClosedException from IndexReader.open
(masking an actual IOException) that takes String or File path.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1442">LUCENE-1442</a>: Multiple-valued NOT_ANALYZED fields can double-count
token offsets.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1453">LUCENE-1453</a>: Ensure IndexReader.reopen()/clone() does not result in
incorrectly closing the shared FSDirectory. This bug would only
happen if you use IndexReader.open() with a File or String argument.
The returned readers are wrapped by a FilterIndexReader that
correctly handles closing of directory after reopen()/clone().<br /><span class="attrib">(Mark Miller, Uwe Schindler, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1457">LUCENE-1457</a>: Fix possible overflow bugs during binary
searches.<br /><span class="attrib">(Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1459">LUCENE-1459</a>: Fix CachingWrapperFilter to not throw exception if
both bits() and getDocIdSet() methods are called.<br /><span class="attrib">(Matt Jones via
Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1519">LUCENE-1519</a>: Fix int overflow bug during segment merging.<br /><span class="attrib">(Deepak
via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1521">LUCENE-1521</a>: Fix int overflow bug when flushing segment.<br /><span class="attrib">(Shon Vella via Mike McCandless)</span>.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1544">LUCENE-1544</a>: Fix deadlock in IndexWriter.addIndexes(IndexReader[]).<br /><span class="attrib">(Mike McCandless via Doug Sale)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1547">LUCENE-1547</a>: Fix rare thread safety issue if two threads call
IndexWriter commit() at the same time.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1465">LUCENE-1465</a>: NearSpansOrdered returns payloads from first possible match
rather than the correct, shortest match; Payloads could be returned even
if the max slop was exceeded; The wrong payload could be returned in
certain situations.<br /><span class="attrib">(Jonathan Mamou, Greg Shackles, Mark Miller)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1186">LUCENE-1186</a>: Add Analyzer.close() to free internal ThreadLocal
resources.<br /><span class="attrib">(Christian Kohlschütter via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1552">LUCENE-1552</a>: Fix IndexWriter.addIndexes(IndexReader[]) to properly
rollback IndexWriter's internal state on hitting an
exception.<br /><span class="attrib">(Scott Garland via Mike McCandless)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.4.0" href="javascript:toggleList('2.4.0')">Release 2.4.0  [2008-10-06]</a></h3>
<ul id="2.4.0.list">
  <li><a id="2.4.0.changes_in_backwards_compatibility_policy" href="javascript:toggleList('2.4.0.changes_in_backwards_compatibility_policy')">Changes in backwards compatibility policy</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.4.0.changes_in_backwards_compatibility_policy.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1340">LUCENE-1340</a>: In a minor change to Lucene's backward compatibility
policy, we are now allowing the Fieldable interface to have
changes, within reason, and made on a case-by-case basis.  If an
application implements it's own Fieldable, please be aware of
this.  Otherwise, no need to be concerned.  This is in effect for
all 2.X releases, starting with 2.4.  Also note, that in all
likelihood, Fieldable will be changed in 3.0.
</li>
    </ol>
  </li>
  <li><a id="2.4.0.changes_in_runtime_behavior" href="javascript:toggleList('2.4.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(4)
    <ol id="2.4.0.changes_in_runtime_behavior.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1151">LUCENE-1151</a>: Fix StandardAnalyzer to not mis-identify host names
(eg lucene.apache.org) as an ACRONYM.  To get back to the pre-2.4
backwards compatible, but buggy, behavior, you can either call
StandardAnalyzer.setDefaultReplaceInvalidAcronym(false) (static
method), or, set system property
org.apache.lucene.analysis.standard.StandardAnalyzer.replaceInvalidAcronym
to "false" on JVM startup.  All StandardAnalyzer instances created
after that will then show the pre-2.4 behavior.  Alternatively,
you can call setReplaceInvalidAcronym(false) to change the
behavior per instance of StandardAnalyzer.  This backwards
compatibility will be removed in 3.0 (hardwiring the value to
true).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1044">LUCENE-1044</a>: IndexWriter with autoCommit=true now commits (such
that a reader can see the changes) far less often than it used to.
Previously, every flush was also a commit.  You can always force a
commit by calling IndexWriter.commit().  Furthermore, in 3.0,
autoCommit will be hardwired to false (IndexWriter constructors
that take an autoCommit argument have been deprecated)<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1335">LUCENE-1335</a>: IndexWriter.addIndexes(Directory[]) and
addIndexesNoOptimize no longer allow the same Directory instance
to be passed in more than once.  Internally, IndexWriter uses
Directory and segment name to uniquely identify segments, so
adding the same Directory more than once was causing duplicates
which led to problems<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1396">LUCENE-1396</a>: Improve PhraseQuery.toString() so that gaps in the
positions are indicated with a ? and multiple terms at the same
position are joined with a |.<br /><span class="attrib">(Andrzej Bialecki via Mike
McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.4.0.api_changes" href="javascript:toggleList('2.4.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(26)
    <ol id="2.4.0.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1084">LUCENE-1084</a>: Changed all IndexWriter constructors to take an
explicit parameter for maximum field size.  Deprecated all the
pre-existing constructors; these will be removed in release 3.0.
NOTE: these new constructors set autoCommit to false.<br /><span class="attrib">(Steven
Rowe via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-584">LUCENE-584</a>: Changed Filter API to return a DocIdSet instead of a
java.util.BitSet. This allows using more efficient data structures
for Filters and makes them more flexible. This deprecates
Filter.bits(), so all filters that implement this outside
the Lucene code base will need to be adapted. See also the javadocs
of the Filter class.<br /><span class="attrib">(Paul Elschot, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1044">LUCENE-1044</a>: Added IndexWriter.commit() which flushes any buffered
adds/deletes and then commits a new segments file so readers will
see the changes.  Deprecate IndexWriter.flush() in favor of
IndexWriter.commit().<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-325">LUCENE-325</a>: Added IndexWriter.expungeDeletes methods, which
consult the MergePolicy to find merges necessary to merge away all
deletes from the index.  This should be a somewhat lower cost
operation than optimize.<br /><span class="attrib">(John Wang via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1233">LUCENE-1233</a>: Return empty array instead of null when no fields
match the specified name in these methods in Document:
getFieldables, getFields, getValues, getBinaryValues.<br /><span class="attrib">(Stefan
Trcek vai Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1234">LUCENE-1234</a>: Make BoostingSpanScorer protected.<br /><span class="attrib">(Andi Vajda via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-510">LUCENE-510</a>: The index now stores strings as true UTF-8 bytes
(previously it was Java's modified UTF-8).  If any text, either
stored fields or a token, has illegal UTF-16 surrogate characters,
these characters are now silently replaced with the Unicode
replacement character U+FFFD.  This is a change to the index file
format.<br /><span class="attrib">(Marvin Humphrey via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-852">LUCENE-852</a>: Let the SpellChecker caller specify IndexWriter mergeFactor
and RAM buffer size.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1290">LUCENE-1290</a>: Deprecate org.apache.lucene.search.Hits, Hit and HitIterator
and remove all references to these classes from the core. Also update demos
and tutorials.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1288">LUCENE-1288</a>: Add getVersion() and getGeneration() to IndexCommit.
getVersion() returns the same value that IndexReader.getVersion()
returns when the reader is opened on the same commit.<br /><span class="attrib">(Jason
Rutherglen via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1311">LUCENE-1311</a>: Added IndexReader.listCommits(Directory) static
method to list all commits in a Directory, plus IndexReader.open
methods that accept an IndexCommit and open the index as of that
commit.  These methods are only useful if you implement a custom
DeletionPolicy that keeps more than the last commit around.<br /><span class="attrib">(Jason Rutherglen via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1325">LUCENE-1325</a>: Added IndexCommit.isOptimized().<br /><span class="attrib">(Shalin Shekhar
Mangar via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1324">LUCENE-1324</a>: Added TokenFilter.reset().<br /><span class="attrib">(Shai Erera via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1340">LUCENE-1340</a>: Added Fieldable.omitTf() method to skip indexing term
frequency, positions and payloads.  This saves index space, and
indexing/searching time.<br /><span class="attrib">(Eks Dev via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1219">LUCENE-1219</a>: Add basic reuse API to Fieldable for binary fields:
getBinaryValue/Offset/Length(); currently only lazy fields reuse
the provided byte[] result to getBinaryValue.<br /><span class="attrib">(Eks Dev via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1334">LUCENE-1334</a>: Add new constructor for Term: Term(String fieldName)
which defaults term text to "".<br /><span class="attrib">(DM Smith via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1333">LUCENE-1333</a>: Added Token.reinit(*) APIs to re-initialize (reuse) a
Token.  Also added term() method to return a String, with a
performance penalty clearly documented.  Also implemented
hashCode() and equals() in Token, and fixed all core and contrib
analyzers to use the re-use APIs.<br /><span class="attrib">(DM Smith via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1329">LUCENE-1329</a>: Add optional readOnly boolean when opening an
IndexReader.  A readOnly reader is not allowed to make changes
(deletions, norms) to the index; in exchanged, the isDeleted
method, often a bottleneck when searching with many threads, is
not synchronized.  The default for readOnly is still false, but in
3.0 the default will become true.<br /><span class="attrib">(Jason Rutherglen via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1367">LUCENE-1367</a>: Add IndexCommit.isDeleted().<br /><span class="attrib">(Shalin Shekhar Mangar
via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1061">LUCENE-1061</a>: Factored out all "new XXXQuery(...)" in
QueryParser.java into protected methods newXXXQuery(...) so that
subclasses can create their own subclasses of each Query type.<br /><span class="attrib">(John Wang via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-753">LUCENE-753</a>: Added new Directory implementation
org.apache.lucene.store.NIOFSDirectory, which uses java.nio's
FileChannel to do file reads.  On most non-Windows platforms, with
many threads sharing a single searcher, this may yield sizable
improvement to query throughput when compared to FSDirectory,
which only allows a single thread to read from an open file at a
time.<br /><span class="attrib">(Jason Rutherglen via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1371">LUCENE-1371</a>: Added convenience method TopDocs Searcher.search(Query query, int n).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1356">LUCENE-1356</a>: Allow easy extensions of TopDocCollector by turning
constructor and fields from package to protected.<br /><span class="attrib">(Shai Erera
via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1375">LUCENE-1375</a>: Added convenience method IndexCommit.getTimestamp,
which is equivalent to
getDirectory().fileModified(getSegmentsFileName()).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1366">LUCENE-1366</a>: Rename Field.Index options to be more accurate:
TOKENIZED becomes ANALYZED;  UN_TOKENIZED becomes NOT_ANALYZED;
NO_NORMS becomes NOT_ANALYZED_NO_NORMS and a new ANALYZED_NO_NORMS
is added.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1131">LUCENE-1131</a>: Added numDeletedDocs method to IndexReader<br /><span class="attrib">(Otis Gospodnetic)</span></li>
    </ol>
  </li>
  <li><a id="2.4.0.bug_fixes" href="javascript:toggleList('2.4.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(16)
    <ol id="2.4.0.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1134">LUCENE-1134</a>: Fixed BooleanQuery.rewrite to only optimize a single
clause query if minNumShouldMatch&lt;=0.<br /><span class="attrib">(Shai Erera via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1169">LUCENE-1169</a>: Fixed bug in IndexSearcher.search(): searching with
a filter might miss some hits because scorer.skipTo() is called
without checking if the scorer is already at the right position.
scorer.skipTo(scorer.doc()) is not a NOOP, it behaves as
scorer.next().<br /><span class="attrib">(Eks Dev, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1182">LUCENE-1182</a>: Added scorePayload to SimilarityDelegator<br /><span class="attrib">(Andi Vajda via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1213">LUCENE-1213</a>: MultiFieldQueryParser was ignoring slop in case
of a single field phrase.<br /><span class="attrib">(Trejkaz via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1228">LUCENE-1228</a>: IndexWriter.commit() was not updating the index version and as
result IndexReader.reopen() failed to sense index changes.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1267">LUCENE-1267</a>: Added numDocs() and maxDoc() to IndexWriter;
deprecated docCount().<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1274">LUCENE-1274</a>: Added new prepareCommit() method to IndexWriter,
which does phase 1 of a 2-phase commit (commit() does phase 2).
This is needed when you want to update an index as part of a
transaction involving external resources (eg a database).  Also
deprecated abort(), renaming it to rollback().<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1003">LUCENE-1003</a>: Stop RussianAnalyzer from removing numbers.<br /><span class="attrib">(TUSUR OpenTeam, Dmitry Lihachev via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1152">LUCENE-1152</a>: SpellChecker fix around clearIndex and indexDictionary
methods, plus removal of IndexReader reference.<br /><span class="attrib">(Naveen Belkale via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1046">LUCENE-1046</a>: Removed dead code in SpellChecker<br /><span class="attrib">(Daniel Naber via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1189">LUCENE-1189</a>: Fixed the QueryParser to handle escaped characters within
quoted terms correctly.<br /><span class="attrib">(Tomer Gabel via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1299">LUCENE-1299</a>: Fixed NPE in SpellChecker when IndexReader is not null and field is<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1303">LUCENE-1303</a>: Fixed BoostingTermQuery's explanation to be marked as a Match
depending only upon the non-payload score part, regardless of the effect of
the payload on the score. Prior to this, score of a query containing a BTQ
differed from its explanation.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1310">LUCENE-1310</a>: Fixed SloppyPhraseScorer to work also for terms repeating more
than twice in the query.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1351">LUCENE-1351</a>: ISOLatin1AccentFilter now cleans additional ligatures<br /><span class="attrib">(Cedrik Lime via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1383">LUCENE-1383</a>: Workaround a nasty "leak" in Java's builtin
ThreadLocal, to prevent Lucene from causing unexpected
OutOfMemoryError in certain situations (notably J2EE
applications).<br /><span class="attrib">(Chris Lu via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.4.0.new_features" href="javascript:toggleList('2.4.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(20)
    <ol id="2.4.0.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1137">LUCENE-1137</a>: Added Token.set/getFlags() accessors for passing more information about a Token through the analysis
process.  The flag is not indexed/stored and is thus only used by analysis.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1147">LUCENE-1147</a>: Add -segment option to CheckIndex tool so you can
check only a specific segment or segments in your index.<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1045">LUCENE-1045</a>: Reopened this issue to add support for short and bytes.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-584">LUCENE-584</a>: Added new data structures to o.a.l.util, such as
OpenBitSet and SortedVIntList. These extend DocIdSet and can
directly be used for Filters with the new Filter API. Also changed
the core Filters to use OpenBitSet instead of java.util.BitSet.<br /><span class="attrib">(Paul Elschot, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-494">LUCENE-494</a>: Added QueryAutoStopWordAnalyzer to allow for the automatic removal, from a query of frequently occurring terms.
This Analyzer is not intended for use during indexing.<br /><span class="attrib">(Mark Harwood via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1044">LUCENE-1044</a>: Change Lucene to properly "sync" files after
committing, to ensure on a machine or OS crash or power cut, even
with cached writes, the index remains consistent.  Also added
explicit commit() method to IndexWriter to force a commit without
having to close.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-997">LUCENE-997</a>: Add search timeout (partial) support.
A TimeLimitedCollector was added to allow limiting search time.
It is a partial solution since timeout is checked only when
collecting a hit, and therefore a search for rare words in a
huge index might not stop within the specified time.<br /><span class="attrib">(Sean Timm via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1184">LUCENE-1184</a>: Allow SnapshotDeletionPolicy to be re-used across
close/re-open of IndexWriter while still protecting an open
snapshot<br /><span class="attrib">(Tim Brennan via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1194">LUCENE-1194</a>: Added IndexWriter.deleteDocuments(Query) to delete
documents matching the specified query.  Also added static unlock
and isLocked methods (deprecating the ones in IndexReader).<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1201">LUCENE-1201</a>: Add IndexReader.getIndexCommit() method.<br /><span class="attrib">(Tim Brennan
via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-550">LUCENE-550</a>:  Added InstantiatedIndex implementation.  Experimental
Index store similar to MemoryIndex but allows for multiple documents
in memory.<br /><span class="attrib">(Karl Wettin via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-400">LUCENE-400</a>: Added word based n-gram filter (in contrib/analyzers) called ShingleFilter and an Analyzer wrapper
that wraps another Analyzer's token stream with a ShingleFilter<br /><span class="attrib">(Sebastian Kirsch, Steve Rowe via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1166">LUCENE-1166</a>: Decomposition tokenfilter for languages like German and Swedish<br /><span class="attrib">(Thomas Peuss via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1187">LUCENE-1187</a>: ChainedFilter and BooleanFilter now work with new Filter API
and DocIdSetIterator-based filters. Backwards-compatibility with old
BitSet-based filters is ensured.<br /><span class="attrib">(Paul Elschot via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1295">LUCENE-1295</a>: Added new method to MoreLikeThis for retrieving interesting terms and made retrieveTerms(int) public.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1298">LUCENE-1298</a>: MoreLikeThis can now accept a custom Similarity<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1297">LUCENE-1297</a>: Allow other string distance measures for the SpellChecker<br /><span class="attrib">(Thomas Morton via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1001">LUCENE-1001</a>: Provide access to Payloads via Spans.  All existing Span Query implementations in Lucene implement.<br /><span class="attrib">(Mark Miller, Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1354">LUCENE-1354</a>: Provide programmatic access to CheckIndex<br /><span class="attrib">(Grant Ingersoll, Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1279">LUCENE-1279</a>: Add support for Collators to RangeFilter/Query and Query Parser.<br /><span class="attrib">(Steve Rowe via Grant Ingersoll)</span></li>
    </ol>
  </li>
  <li><a id="2.4.0.optimizations" href="javascript:toggleList('2.4.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(6)
    <ol id="2.4.0.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-705">LUCENE-705</a>: When building a compound file, use
RandomAccessFile.setLength() to tell the OS/filesystem to
pre-allocate space for the file.  This may improve fragmentation
in how the CFS file is stored, and allows us to detect an upcoming
disk full situation before actually filling up the disk.<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1120">LUCENE-1120</a>: Speed up merging of term vectors by bulk-copying the
raw bytes for each contiguous range of non-deleted documents.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1185">LUCENE-1185</a>: Avoid checking if the TermBuffer 'scratch' in
SegmentTermEnum is null for every call of scanTo().<br /><span class="attrib">(Christian Kohlschuetter via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1217">LUCENE-1217</a>: Internal to Field.java, use isBinary instead of
runtime type checking for possible speedup of binaryValue().<br /><span class="attrib">(Eks Dev via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1183">LUCENE-1183</a>: Optimized TRStringDistance class (in contrib/spell) that uses
less memory than the previous version.<br /><span class="attrib">(Cédrik LIME via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1195">LUCENE-1195</a>: Improve term lookup performance by adding a LRU cache to the
TermInfosReader. In performance experiments the speedup was about 25% on
average on mid-size indexes with ~500,000 documents for queries with 3
terms and about 7% on larger indexes with ~4.3M documents.<br /><span class="attrib">(Michael Busch)</span></li>
    </ol>
  </li>
  <li><a id="2.4.0.documentation" href="javascript:toggleList('2.4.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(4)
    <ol id="2.4.0.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1236">LUCENE-1236</a>:  Added some clarifying remarks to EdgeNGram*.java<br /><span class="attrib">(Hiroaki Kawai via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1157">LUCENE-1157</a> and <a href="http://issues.apache.org/jira/browse/LUCENE-1256">LUCENE-1256</a>: HTML changes log, created automatically
from CHANGES.txt. This HTML file is currently visible only via developers page.<br /><span class="attrib">(Steven Rowe via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1349">LUCENE-1349</a>: Fieldable can now be changed without breaking backward compatibility rules (within reason.  See the note at
  the top of this file and also on Fieldable.java).<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1873">LUCENE-1873</a>: Update documentation to reflect current Contrib area status.<br /><span class="attrib">(Steven Rowe, Mark Miller)</span></li>
    </ol>
  </li>
  <li><a id="2.4.0.build" href="javascript:toggleList('2.4.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.4.0.build.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1153">LUCENE-1153</a>: Added JUnit JAR to new lib directory.  Updated build to rely on local JUnit instead of ANT/lib.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1202">LUCENE-1202</a>: Small fixes to the way Clover is used to work better
with contribs.  Of particular note: a single clover db is used
regardless of whether tests are run globally or in the specific
contrib directories.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1353">LUCENE-1353</a>: Javacc target in contrib/miscellaneous for
generating the precedence query parser.
</li>
    </ol>
  </li>
  <li><a id="2.4.0.test_cases" href="javascript:toggleList('2.4.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.4.0.test_cases.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1238">LUCENE-1238</a>: Fixed intermittent failures of TestTimeLimitedCollector.testTimeoutMultiThreaded.
Within this fix, "greedy" flag was added to TimeLimitedCollector, to allow the wrapped
collector to collect also the last doc, after allowed-tTime passed.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1348">LUCENE-1348</a>: relax TestTimeLimitedCollector to not fail due to
timeout exceeded (just because test machine is very busy).
</li>
    </ol>
  </li>
</ul>
<h3><a id="2.3.2" href="javascript:toggleList('2.3.2')">Release 2.3.2  [2008-05-05]</a></h3>
<ul id="2.3.2.list">
  <li><a id="2.3.2.bug_fixes" href="javascript:toggleList('2.3.2.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(12)
    <ol id="2.3.2.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1191">LUCENE-1191</a>: On hitting OutOfMemoryError in any index-modifying
methods in IndexWriter, do not commit any further changes to the
index to prevent risk of possible corruption.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1197">LUCENE-1197</a>: Fixed issue whereby IndexWriter would flush by RAM
too early when TermVectors were in use.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1198">LUCENE-1198</a>: Don't corrupt index if an exception happens inside
DocumentsWriter.init<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1199">LUCENE-1199</a>: Added defensive check for null indexReader before
calling close in IndexModifier.close()<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1200">LUCENE-1200</a>: Fix rare deadlock case in addIndexes* when
ConcurrentMergeScheduler is in use<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1208">LUCENE-1208</a>: Fix deadlock case on hitting an exception while
processing a document that had triggered a flush<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1210">LUCENE-1210</a>: Fix deadlock case on hitting an exception while
starting a merge when using ConcurrentMergeScheduler<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1222">LUCENE-1222</a>: Fix IndexWriter.doAfterFlush to always be called on
flush<br /><span class="attrib">(Mark Ferguson via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1226">LUCENE-1226</a>: Fixed IndexWriter.addIndexes(IndexReader[]) to commit
successfully created compound files.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1150">LUCENE-1150</a>: Re-expose StandardTokenizer's constants publicly;
this was accidentally lost with <a href="http://issues.apache.org/jira/browse/LUCENE-966">LUCENE-966</a>.<br /><span class="attrib">(Nicolas Lalevée via
Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1262">LUCENE-1262</a>: Fixed bug in BufferedIndexReader.refill whereby on
hitting an exception in readInternal, the buffer is incorrectly
filled with stale bytes such that subsequent calls to readByte()
return incorrect results.<br /><span class="attrib">(Trejkaz via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1270">LUCENE-1270</a>: Fixed intermittent case where IndexWriter.close()
would hang after IndexWriter.addIndexesNoOptimize had been
called.<br /><span class="attrib">(Stu Hood via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.3.2.build" href="javascript:toggleList('2.3.2.build')">Build</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.3.2.build.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1230">LUCENE-1230</a>: Include *pom.xml* in source release files.<br /><span class="attrib">(Michael Busch)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.3.1" href="javascript:toggleList('2.3.1')">Release 2.3.1  [2008-02-22]</a></h3>
<ul id="2.3.1.list">
  <li><a id="2.3.1.bug_fixes" href="javascript:toggleList('2.3.1.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(7)
    <ol id="2.3.1.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1168">LUCENE-1168</a>: Fixed corruption cases when autoCommit=false and
documents have mixed term vectors<br /><span class="attrib">(Suresh Guvvala via Mike
McCandless)</span>.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1171">LUCENE-1171</a>: Fixed some cases where OOM errors could cause
deadlock in IndexWriter<br /><span class="attrib">(Mike McCandless)</span>.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1173">LUCENE-1173</a>: Fixed corruption case when autoCommit=false and bulk
merging of stored fields is used<br /><span class="attrib">(Yonik via Mike McCandless)</span>.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1163">LUCENE-1163</a>: Fixed bug in CharArraySet.contains(char[] buffer, int
offset, int len) that was ignoring offset and thus giving the
wrong answer.<br /><span class="attrib">(Thomas Peuss via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1177">LUCENE-1177</a>: Fix rare case where IndexWriter.optimize might do too
many merges at the end.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1176">LUCENE-1176</a>: Fix corruption case when documents with no term
vector fields are added before documents with term vector fields.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1179">LUCENE-1179</a>: Fixed assert statement that was incorrectly
preventing Fields with empty-string field name from working.<br /><span class="attrib">(Sergey Kabashnyuk via Mike McCandless)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.3.0" href="javascript:toggleList('2.3.0')">Release 2.3.0  [2008-01-21]</a></h3>
<ul id="2.3.0.list">
  <li><a id="2.3.0.changes_in_runtime_behavior" href="javascript:toggleList('2.3.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.3.0.changes_in_runtime_behavior.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-994">LUCENE-994</a>: Defaults for IndexWriter have been changed to maximize
out-of-the-box indexing speed.  First, IndexWriter now flushes by
RAM usage (16 MB by default) instead of a fixed doc count (call
IndexWriter.setMaxBufferedDocs to get backwards compatible
behavior).  Second, ConcurrentMergeScheduler is used to run merges
using background threads (call IndexWriter.setMergeScheduler(new
SerialMergeScheduler()) to get backwards compatible behavior).
Third, merges are chosen based on size in bytes of each segment
rather than document count of each segment (call
IndexWriter.setMergePolicy(new LogDocMergePolicy()) to get
backwards compatible behavior).
<p/>
NOTE: users of ParallelReader must change back all of these
defaults in order to ensure the docIDs "align" across all parallel
indices.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1045">LUCENE-1045</a>: SortField.AUTO didn't work with long. When detecting
the field type for sorting automatically, numbers used to be
interpreted as int, then as float, if parsing the number as an int
failed. Now the detection checks for int, then for long,
then for float.<br /><span class="attrib">(Daniel Naber)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.api_changes" href="javascript:toggleList('2.3.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(14)
    <ol id="2.3.0.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-843">LUCENE-843</a>: Added IndexWriter.setRAMBufferSizeMB(...) to have
IndexWriter flush whenever the buffered documents are using more
than the specified amount of RAM.  Also added new APIs to Token
that allow one to set a char[] plus offset and length to specify a
token (to avoid creating a new String() for each Token).<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-963">LUCENE-963</a>: Add setters to Field to allow for re-using a single
Field instance during indexing.  This is a sizable performance
gain, especially for small documents.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-969">LUCENE-969</a>: Add new APIs to Token, TokenStream and Analyzer to
permit re-using of Token and TokenStream instances during
indexing.  Changed Token to use a char[] as the store for the
termText instead of String.  This gives faster tokenization
performance (~10-15%).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-847">LUCENE-847</a>: Factored MergePolicy, which determines which merges
should take place and when, as well as MergeScheduler, which
determines when the selected merges should actually run, out of
IndexWriter.  The default merge policy is now
LogByteSizeMergePolicy (see <a href="http://issues.apache.org/jira/browse/LUCENE-845">LUCENE-845</a>) and the default merge
scheduler is now ConcurrentMergeScheduler (see
<a href="http://issues.apache.org/jira/browse/LUCENE-870">LUCENE-870</a>).<br /><span class="attrib">(Steven Parkes via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1052">LUCENE-1052</a>: Add IndexReader.setTermInfosIndexDivisor(int) method
that allows you to reduce memory usage of the termInfos by further
sub-sampling (over the termIndexInterval that was used during
indexing) which terms are loaded into memory.<br /><span class="attrib">(Chuck Williams,
Doug Cutting via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-743">LUCENE-743</a>: Add IndexReader.reopen() method that re-opens an
existing IndexReader (see New features -&gt; 8.)<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1062">LUCENE-1062</a>: Add setData(byte[] data),
setData(byte[] data, int offset, int length), getData(), getOffset()
and clone() methods to o.a.l.index.Payload. Also add the field name
as arg to Similarity.scorePayload().<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-982">LUCENE-982</a>: Add IndexWriter.optimize(int maxNumSegments) method to
"partially optimize" an index down to maxNumSegments segments.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1080">LUCENE-1080</a>: Changed Token.DEFAULT_TYPE to be public.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1064">LUCENE-1064</a>: Changed TopDocs constructor to be public.<br /><span class="attrib">(Shai Erera via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1079">LUCENE-1079</a>: DocValues cleanup: constructor now has no params,
and getInnerArray() now throws UnsupportedOperationException<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1089">LUCENE-1089</a>: Added PriorityQueue.insertWithOverflow, which returns
the Object (if any) that was bumped from the queue to allow
re-use.<br /><span class="attrib">(Shai Erera via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1101">LUCENE-1101</a>: Token reuse 'contract' (defined <a href="http://issues.apache.org/jira/browse/LUCENE-969">LUCENE-969</a>)
modified so it is token producer's responsibility
to call Token.clear().<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1118">LUCENE-1118</a>: Changed StandardAnalyzer to skip too-long (default &gt;
255 characters) tokens.  You can increase this limit by calling
StandardAnalyzer.setMaxTokenLength(...).<br /><span class="attrib">(Michael McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.bug_fixes" href="javascript:toggleList('2.3.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(28)
    <ol id="2.3.0.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-933">LUCENE-933</a>: QueryParser fixed to not produce empty sub
BooleanQueries "()" even if the Analyzer produced no
tokens for input.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-955">LUCENE-955</a>: Fixed SegmentTermPositions to work correctly with the
first term in the dictionary.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-951">LUCENE-951</a>: Fixed NullPointerException in MultiLevelSkipListReader
that was thrown after a call of TermPositions.seek().<br /><span class="attrib">(Rich Johnson via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-938">LUCENE-938</a>: Fixed cases where an unhandled exception in
IndexWriter's methods could cause deletes to be lost.<br /><span class="attrib">(Steven Parkes via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-962">LUCENE-962</a>: Fixed case where an unhandled exception in
IndexWriter.addDocument or IndexWriter.updateDocument could cause
unreferenced files in the index to not be deleted<br /><span class="attrib">(Steven Parkes via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-957">LUCENE-957</a>: RAMDirectory fixed to properly handle directories
larger than Integer.MAX_VALUE.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-781">LUCENE-781</a>: MultiReader fixed to not throw NPE if isCurrent(),
isOptimized() or getVersion() is called. Separated MultiReader
into two classes: MultiSegmentReader extends IndexReader, is
package-protected and is created automatically by IndexReader.open()
in case the index has multiple segments. The public MultiReader
now extends MultiSegmentReader and is intended to be used by users
who want to add their own subreaders.<br /><span class="attrib">(Daniel Naber, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-970">LUCENE-970</a>: FilterIndexReader now implements isOptimized(). Before
a call of isOptimized() would throw a NPE.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-832">LUCENE-832</a>: ParallelReader fixed to not throw NPE if isCurrent(),
isOptimized() or getVersion() is called.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-948">LUCENE-948</a>: Fix FNFE exception caused by stale NFS client
directory listing caches when writers on different machines are
sharing an index over NFS and using a custom deletion policy<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-978">LUCENE-978</a>: Ensure TermInfosReader, FieldsReader, and FieldsReader
close any streams they had opened if an exception is hit in the
constructor.<br /><span class="attrib">(Ning Li via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-985">LUCENE-985</a>: If an extremely long term is in a doc (&gt; 16383 chars),
we now throw an IllegalArgumentException saying the term is too
long, instead of cryptic ArrayIndexOutOfBoundsException.<br /><span class="attrib">(Karl
Wettin via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-991">LUCENE-991</a>: The explain() method of BoostingTermQuery had errors
when no payloads were present on a document.<br /><span class="attrib">(Peter Keegan via
Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-992">LUCENE-992</a>: Fixed IndexWriter.updateDocument to be atomic again
(this was broken by <a href="http://issues.apache.org/jira/browse/LUCENE-843">LUCENE-843</a>).<br /><span class="attrib">(Ning Li via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1008">LUCENE-1008</a>: Fixed corruption case when document with no term
vector fields is added after documents with term vector fields.
This bug was introduced with <a href="http://issues.apache.org/jira/browse/LUCENE-843">LUCENE-843</a>.<br /><span class="attrib">(Grant Ingersoll via
Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1006">LUCENE-1006</a>: Fixed QueryParser to accept a "" field value (zero
length quoted string.)<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1010">LUCENE-1010</a>: Fixed corruption case when document with no term
vector fields is added after documents with term vector fields.
This case is hit during merge and would cause an EOFException.
This bug was introduced with <a href="http://issues.apache.org/jira/browse/LUCENE-984">LUCENE-984</a>.<br /><span class="attrib">(Andi Vajda via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1009">LUCENE-1009</a>: Fix merge slowdown with LogByteSizeMergePolicy when
autoCommit=false and documents are using stored fields and/or term
vectors.<br /><span class="attrib">(Mark Miller via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1011">LUCENE-1011</a>: Fixed corruption case when two or more machines,
sharing an index over NFS, can be writers in quick succession.<br /><span class="attrib">(Patrick Kimber via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1028">LUCENE-1028</a>: Fixed Weight serialization for few queries:
DisjunctionMaxQuery, ValueSourceQuery, CustomScoreQuery.
Serialization check added for all queries.<br /><span class="attrib">(Kyle Maxwell via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1048">LUCENE-1048</a>: Fixed incorrect behavior in Lock.obtain(...) when the
timeout argument is very large (eg Long.MAX_VALUE).  Also added
Lock.LOCK_OBTAIN_WAIT_FOREVER constant to never timeout.<br /><span class="attrib">(Nikolay
Diakov via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1050">LUCENE-1050</a>: Throw LockReleaseFailedException in
Simple/NativeFSLockFactory if we fail to delete the lock file when
releasing the lock.<br /><span class="attrib">(Nikolay Diakov via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1071">LUCENE-1071</a>: Fixed SegmentMerger to correctly set payload bit in
the merged segment.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1042">LUCENE-1042</a>: Remove throwing of IOException in getTermFreqVector(int, String, TermVectorMapper) to be consistent
with other getTermFreqVector calls.  Also removed the throwing of the other IOException in that method to be consistent.<br /><span class="attrib">(Karl Wettin via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1096">LUCENE-1096</a>: Fixed Hits behavior when hits' docs are deleted
along with iterating the hits. Deleting docs already retrieved
now works seamlessly. If docs not yet retrieved are deleted
(e.g. from another thread), and then, relying on the initial
Hits.length(), an application attempts to retrieve more hits
than actually exist , a ConcurrentMidificationException
is thrown.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1068">LUCENE-1068</a>: Changed StandardTokenizer to fix an issue with it marking
  the type of some tokens incorrectly.  This is done by adding a new flag named
  replaceInvalidAcronym which defaults to false, the current, incorrect behavior.  Setting
  this flag to true fixes the problem.  This flag is a temporary fix and is already
  marked as being deprecated.  3.x will implement the correct approach.  (Shai Erera via Grant Ingersoll)
  <a href="http://issues.apache.org/jira/browse/LUCENE-1140">LUCENE-1140</a>: Fixed NPE caused by 1068<br /><span class="attrib">(Alexei Dets via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-749">LUCENE-749</a>: ChainedFilter behavior fixed when logic of
first filter is ANDNOT.<br /><span class="attrib">(Antonio Bruno via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-508">LUCENE-508</a>: Make sure SegmentTermEnum.prev() is accurate (= last
term) after next() returns false.<br /><span class="attrib">(Steven Tamm via Mike
McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.new_features" href="javascript:toggleList('2.3.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(14)
    <ol id="2.3.0.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-906">LUCENE-906</a>: Elision filter for French.<br /><span class="attrib">(Mathieu Lecarme via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-960">LUCENE-960</a>: Added a SpanQueryFilter and related classes to allow for
not only filtering, but knowing where in a Document a Filter matches<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-868">LUCENE-868</a>: Added new Term Vector access features.  New callback
mechanism allows application to define how and where to read Term
Vectors from disk. This implementation contains several extensions
of the new abstract TermVectorMapper class.  The new API should be
back-compatible.  No changes in the actual storage of Term Vectors
has taken place.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1038">LUCENE-1038</a>: Added setDocumentNumber() method to TermVectorMapper
to provide information about what document is being accessed.<br /><span class="attrib">(Karl Wettin via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-975">LUCENE-975</a>: Added PositionBasedTermVectorMapper that allows for
position based lookup of term vector information.
See item #3 above (<a href="http://issues.apache.org/jira/browse/LUCENE-868">LUCENE-868</a>).
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1011">LUCENE-1011</a>: Added simple tools (all in org.apache.lucene.store)
to verify that locking is working properly.  LockVerifyServer runs
a separate server to verify locks.  LockStressTest runs a simple
tool that rapidly obtains and releases locks.
VerifyingLockFactory is a LockFactory that wraps any other
LockFactory and consults the LockVerifyServer whenever a lock is
obtained or released, throwing an exception if an illegal lock
obtain occurred.<br /><span class="attrib">(Patrick Kimber via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1015">LUCENE-1015</a>: Added FieldCache extension (ExtendedFieldCache) to
support doubles and longs.  Added support into SortField for sorting
on doubles and longs as well.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1020">LUCENE-1020</a>: Created basic index checking &amp; repair tool
(o.a.l.index.CheckIndex).  When run without -fix it does a
detailed test of all segments in the index and reports summary
information and any errors it hit.  With -fix it will remove
segments that had errors.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-743">LUCENE-743</a>: Add IndexReader.reopen() method that re-opens an
existing IndexReader by only loading those portions of an index
that have changed since the reader was (re)opened. reopen() can
be significantly faster than open(), depending on the amount of
index changes. SegmentReader, MultiSegmentReader, MultiReader,
and ParallelReader implement reopen().<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1040">LUCENE-1040</a>: CharArraySet useful for efficiently checking
set membership of text specified by char[].<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1073">LUCENE-1073</a>: Created SnapshotDeletionPolicy to facilitate taking a
live backup of an index without pausing indexing.<br /><span class="attrib">(Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1019">LUCENE-1019</a>: CustomScoreQuery enhanced to support multiple
ValueSource queries.<br /><span class="attrib">(Kyle Maxwell via Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1095">LUCENE-1095</a>: Added an option to StopFilter to increase
positionIncrement of the token succeeding a stopped token.
Disabled by default. Similar option added to QueryParser
to consider token positions when creating PhraseQuery
and MultiPhraseQuery. Disabled by default (so by default
the query parser ignores position increments).<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1380">LUCENE-1380</a>: Added TokenFilter for setting position increment in special cases related to the ShingleFilter<br /><span class="attrib">(Mck SembWever, Steve Rowe, Karl Wettin via Grant Ingersoll)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.optimizations" href="javascript:toggleList('2.3.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(14)
    <ol id="2.3.0.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-937">LUCENE-937</a>: CachingTokenFilter now uses an iterator to access the
Tokens that are cached in the LinkedList. This increases performance
significantly, especially when the number of Tokens is large.<br /><span class="attrib">(Mark Miller via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-843">LUCENE-843</a>: Substantial optimizations to improve how IndexWriter
uses RAM for buffering documents and to speed up indexing (2X-8X
faster).  A single shared hash table now records the in-memory
postings per unique term and is directly flushed into a single
segment.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-892">LUCENE-892</a>: Fixed extra "buffer to buffer copy" that sometimes
takes place when using compound files.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-959">LUCENE-959</a>: Remove synchronization in Document<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-963">LUCENE-963</a>: Add setters to Field to allow for re-using a single
Field instance during indexing.  This is a sizable performance
gain, especially for small documents.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-939">LUCENE-939</a>: Check explicitly for boundary conditions in FieldInfos
and don't rely on exceptions.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-966">LUCENE-966</a>: Very substantial speedups (~6X faster) for
StandardTokenizer (StandardAnalyzer) by using JFlex instead of
JavaCC to generate the tokenizer.<br /><span class="attrib">(Stanislaw Osinski via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-969">LUCENE-969</a>: Changed core tokenizers &amp; filters to re-use Token and
TokenStream instances when possible to improve tokenization
performance (~10-15%).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-871">LUCENE-871</a>: Speedup ISOLatin1AccentFilter<br /><span class="attrib">(Ian Boston via Mike
McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-986">LUCENE-986</a>: Refactored SegmentInfos from IndexReader into the new
subclass DirectoryIndexReader. SegmentReader and MultiSegmentReader
now extend DirectoryIndexReader and are the only IndexReader
implementations that use SegmentInfos to access an index and
acquire a write lock for index modifications.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1007">LUCENE-1007</a>: Allow flushing in IndexWriter to be triggered by
either RAM usage or document count or both (whichever comes
first), by adding symbolic constant DISABLE_AUTO_FLUSH to disable
one of the flush triggers.<br /><span class="attrib">(Ning Li via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1043">LUCENE-1043</a>: Speed up merging of stored fields by bulk-copying the
raw bytes for each contiguous range of non-deleted documents.<br /><span class="attrib">(Robert Engels via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-693">LUCENE-693</a>: Speed up nested conjunctions (~2x) that match many
documents, and a slight performance increase for top level
conjunctions.<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1098">LUCENE-1098</a>: Make inner class StandardAnalyzer.SavedStreams static
and final.<br /><span class="attrib">(Nathan Beyer via Michael Busch)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.documentation" href="javascript:toggleList('2.3.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.3.0.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1051">LUCENE-1051</a>: Generate separate javadocs for core, demo and contrib
classes, as well as an unified view. Also add an appropriate menu
structure to the website.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-746">LUCENE-746</a>: Fix error message in AnalyzingQueryParser.getPrefixQuery.<br /><span class="attrib">(Ronnie Kolehmainen via Michael Busch)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.build" href="javascript:toggleList('2.3.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(8)
    <ol id="2.3.0.build.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-908">LUCENE-908</a>: Improvements and simplifications for how the MANIFEST
file and the META-INF dir are created.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-935">LUCENE-935</a>: Various improvements for the maven artifacts. Now the
artifacts also include the sources as .jar files.<br /><span class="attrib">(Michael Busch)</span></li>
      <li>Added apply-patch target to top-level build.  Defaults to looking for
a patch in ${basedir}/../patches with name specified by -Dpatch.name.
Can also specify any location by -Dpatch.file property on the command
line.  This should be helpful for easy application of patches, but it
is also a step towards integrating automatic patch application with
JIRA and Hudson, and is thus subject to change.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-935">LUCENE-935</a>: Defined property "m2.repository.url" to allow setting
the url to a maven remote repository to deploy to.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1051">LUCENE-1051</a>: Include javadocs in the maven artifacts.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1055">LUCENE-1055</a>: Remove gdata-server from build files and its sources
from trunk.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-935">LUCENE-935</a>: Allow to deploy maven artifacts to a remote m2 repository
via scp and ssh authentication.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1123">LUCENE-1123</a>: Allow overriding the specification version for
MANIFEST.MF<br /><span class="attrib">(Michael Busch)</span></li>
    </ol>
  </li>
  <li><a id="2.3.0.test_cases" href="javascript:toggleList('2.3.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="2.3.0.test_cases.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-766">LUCENE-766</a>: Test adding two fields with the same name but different
term vector setting.<br /><span class="attrib">(Nicolas Lalevée via Doron Cohen)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.2.0" href="javascript:toggleList('2.2.0')">Release 2.2.0  [2007-06-19]</a></h3>
<ul id="2.2.0.list">
  <li><a id="2.2.0.changes_in_runtime_behavior" href="javascript:toggleList('2.2.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(none)
    <ol id="2.2.0.changes_in_runtime_behavior.list">
    </ol>
  </li>
  <li><a id="2.2.0.api_changes" href="javascript:toggleList('2.2.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(13)
    <ol id="2.2.0.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-793">LUCENE-793</a>: created new exceptions and added them to throws clause
for many methods (all subclasses of IOException for backwards
compatibility): index.StaleReaderException,
index.CorruptIndexException, store.LockObtainFailedException.
This was done to better call out the possible root causes of an
IOException from these methods.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-811">LUCENE-811</a>: make SegmentInfos class, plus a few methods from related
classes, package-private again (they were unnecessarily made public
as part of <a href="http://issues.apache.org/jira/browse/LUCENE-701">LUCENE-701</a>).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-710">LUCENE-710</a>: added optional autoCommit boolean to IndexWriter
constructors.  When this is false, index changes are not committed
until the writer is closed.  This gives explicit control over when
a reader will see the changes.  Also added optional custom
deletion policy to explicitly control when prior commits are
removed from the index.  This is intended to allow applications to
share an index over NFS by customizing when prior commits are
deleted.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-818">LUCENE-818</a>: changed most public methods of IndexWriter,
IndexReader (and its subclasses), FieldsReader and RAMDirectory to
throw AlreadyClosedException if they are accessed after being
closed.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-834">LUCENE-834</a>: Changed some access levels for certain Span classes to allow them
to be overridden.  They have been marked expert only and not for public
consumption.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-796">LUCENE-796</a>: Removed calls to super.* from various get*Query methods in
MultiFieldQueryParser, in order to allow sub-classes to override them.<br /><span class="attrib">(Steven Parkes via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-857">LUCENE-857</a>: Removed caching from QueryFilter and deprecated QueryFilter
in favour of QueryWrapperFilter or QueryWrapperFilter + CachingWrapperFilter
combination when caching is desired.<br /><span class="attrib">(Chris Hostetter, Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-869">LUCENE-869</a>: Changed FSIndexInput and FSIndexOutput to inner classes of FSDirectory
to enable extensibility of these classes.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-580">LUCENE-580</a>: Added the public method reset() to TokenStream. This method does
nothing by default, but may be overwritten by subclasses to support consuming
the TokenStream more than once.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-580">LUCENE-580</a>: Added a new constructor to Field that takes a TokenStream as
argument, available as tokenStreamValue(). This is useful to avoid the need of
"dummy analyzers" for pre-analyzed fields.<br /><span class="attrib">(Karl Wettin, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-730">LUCENE-730</a>: Added the new methods to BooleanQuery setAllowDocsOutOfOrder() and
getAllowDocsOutOfOrder(). Deprecated the methods setUseScorer14() and
getUseScorer14(). The optimization patch <a href="http://issues.apache.org/jira/browse/LUCENE-730">LUCENE-730</a> (see Optimizations-&gt;3.)
improves performance for certain queries but results in scoring out of docid
order. This patch reverse this change, so now by default hit docs are scored
in docid order if not setAllowDocsOutOfOrder(true) is explicitly called.
This patch also enables the tests in QueryUtils again that check for docid
order.<br /><span class="attrib">(Paul Elschot, Doron Cohen, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-888">LUCENE-888</a>: Added Directory.openInput(File path, int bufferSize)
to optionally specify the size of the read buffer.  Also added
BufferedIndexInput.setBufferSize(int) to change the buffer size.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-923">LUCENE-923</a>: Make SegmentTermPositionVector package-private. It does not need
to be public because it implements the public interface TermPositionVector.<br /><span class="attrib">(Michael Busch)</span></li>
    </ol>
  </li>
  <li><a id="2.2.0.bug_fixes" href="javascript:toggleList('2.2.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(24)
    <ol id="2.2.0.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-804">LUCENE-804</a>: Fixed build.xml to pack a fully compilable src dist.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-813">LUCENE-813</a>: Leading wildcard fixed to work with trailing wildcard.
Query parser modified to create a prefix query only for the case
that there is a single trailing wildcard (and no additional wildcard
or '?' in the query text).<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-812">LUCENE-812</a>: Add no-argument constructors to NativeFSLockFactory
and SimpleFSLockFactory.  This enables all 4 builtin LockFactory
implementations to be specified via the System property
org.apache.lucene.store.FSDirectoryLockFactoryClass.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-821">LUCENE-821</a>: The new single-norm-file introduced by <a href="http://issues.apache.org/jira/browse/LUCENE-756">LUCENE-756</a>
failed to reduce the number of open descriptors since it was still
opened once per field with norms.<br /><span class="attrib">(yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-823">LUCENE-823</a>: Make sure internal file handles are closed when
hitting an exception (eg disk full) while flushing deletes in
IndexWriter's mergeSegments, and also during
IndexWriter.addIndexes.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-825">LUCENE-825</a>: If directory is removed after
FSDirectory.getDirectory() but before IndexReader.open you now get
a FileNotFoundException like Lucene pre-2.1 (before this fix you
got an NPE).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-800">LUCENE-800</a>: Removed backslash from the TERM_CHAR list in the queryparser,
because the backslash is the escape character. Also changed the ESCAPED_CHAR
list to contain all possible characters, because every character that
follows a backslash should be considered as escaped.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-372">LUCENE-372</a>: QueryParser.parse() now ensures that the entire input string
is consumed. Now a ParseException is thrown if a query contains too many
closing parentheses.<br /><span class="attrib">(Andreas Neumann via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-814">LUCENE-814</a>: javacc build targets now fix line-end-style of generated files.
Now also deleting all javacc generated files before calling javacc.<br /><span class="attrib">(Steven Parkes, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-829">LUCENE-829</a>: close readers in contrib/benchmark.<br /><span class="attrib">(Karl Wettin, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-828">LUCENE-828</a>: Minor fix for Term's equal().<br /><span class="attrib">(Paul Cowan via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-846">LUCENE-846</a>: Fixed: if IndexWriter is opened with autoCommit=false,
and you call addIndexes, and hit an exception (eg disk full) then
when IndexWriter rolls back its internal state this could corrupt
the instance of IndexWriter (but, not the index itself) by
referencing already deleted segments.  This bug was only present
in 2.2 (trunk), ie was never released.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-736">LUCENE-736</a>: Sloppy phrase query with repeating terms matches wrong docs.
For example query "B C B"~2 matches the doc "A B C D E".<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-789">LUCENE-789</a>: Fixed: custom similarity is ignored when using MultiSearcher (problem reported
by Alexey Lef). Now the similarity applied by MultiSearcer.setSimilarity(sim) is being used.
Note that as before this fix, creating a multiSearcher from Searchers for whom custom similarity
was set has no effect - it is masked by the similarity of the MultiSearcher. This is as
designed, because MultiSearcher operates on Searchables (not Searchers).<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-880">LUCENE-880</a>: Fixed DocumentWriter to close the TokenStreams after it
has written the postings. Then the resources associated with the
TokenStreams can safely be released.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-883">LUCENE-883</a>: consecutive calls to Spellchecker.indexDictionary()
won't insert terms twice anymore.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-881">LUCENE-881</a>: QueryParser.escape() now also escapes the characters
'|' and '&amp;' which are part of the queryparser syntax.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-886">LUCENE-886</a>: Spellchecker clean up: exceptions aren't printed to STDERR
anymore and ignored, but re-thrown. Some javadoc improvements.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-698">LUCENE-698</a>: FilteredQuery now takes the query boost into account for
scoring.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-763">LUCENE-763</a>: Spellchecker: LuceneDictionary used to skip first word in
enumeration.<br /><span class="attrib">(Christian Mallwitz via Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-903">LUCENE-903</a>: FilteredQuery explanation inaccuracy with boost.
Explanation tests now "deep" check the explanation details.<br /><span class="attrib">(Chris Hostetter, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-912">LUCENE-912</a>: DisjunctionMaxScorer first skipTo(target) call ignores the
skip target param and ends up at the first match.<br /><span class="attrib">(Sudaakeran B. via Chris Hostetter &amp; Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-913">LUCENE-913</a>: Two consecutive score() calls return different
scores for Boolean Queries.<br /><span class="attrib">(Michael Busch, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1013">LUCENE-1013</a>: Fix IndexWriter.setMaxMergeDocs to work "out of the
box", again, by moving set/getMaxMergeDocs up from
LogDocMergePolicy into LogMergePolicy.  This fixes the API
breakage (non backwards compatible change) caused by <a href="http://issues.apache.org/jira/browse/LUCENE-994">LUCENE-994</a>.<br /><span class="attrib">(Yonik Seeley via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.2.0.new_features" href="javascript:toggleList('2.2.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(9)
    <ol id="2.2.0.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-759">LUCENE-759</a>: Added two n-gram-producing TokenFilters.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-822">LUCENE-822</a>: Added FieldSelector capabilities to Searchable for use with
RemoteSearcher, and other Searchable implementations.<br /><span class="attrib">(Mark Miller, Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-755">LUCENE-755</a>: Added the ability to store arbitrary binary metadata in the posting list.
These metadata are called Payloads. For every position of a Token one Payload in the form
of a variable length byte array can be stored in the prox file.
Remark: The APIs introduced with this feature are in experimental state and thus
        contain appropriate warnings in the javadocs.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-834">LUCENE-834</a>: Added BoostingTermQuery which can boost scores based on the
values of a payload (see #3 above.)<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-834">LUCENE-834</a>: Similarity has a new method for scoring payloads called
scorePayloads that can be overridden to take advantage of payload
storage (see #3 above)
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-834">LUCENE-834</a>: Added isPayloadAvailable() onto TermPositions interface and
implemented it in the appropriate places<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-853">LUCENE-853</a>: Added RemoteCachingWrapperFilter to enable caching of Filters
on the remote side of the RMI connection.<br /><span class="attrib">(Matt Ericson via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-446">LUCENE-446</a>: Added Solr's search.function for scores based on field
values, plus CustomScoreQuery for simple score (post) customization.<br /><span class="attrib">(Yonik Seeley, Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-1058">LUCENE-1058</a>: Added new TeeTokenFilter (like the UNIX 'tee' command) and SinkTokenizer which can be used to share tokens between two or more
Fields such that the other Fields do not have to go through the whole Analysis process over again.  For instance, if you have two
Fields that share all the same analysis steps except one lowercases tokens and the other does not, you can coordinate the operations
between the two using the TeeTokenFilter and the SinkTokenizer.  See TeeSinkTokenTest.java for examples.<br /><span class="attrib">(Grant Ingersoll, Michael Busch, Yonik Seeley)</span></li>
    </ol>
  </li>
  <li><a id="2.2.0.optimizations" href="javascript:toggleList('2.2.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(7)
    <ol id="2.2.0.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-761">LUCENE-761</a>: The proxStream is now cloned lazily in SegmentTermPositions
when nextPosition() is called for the first time. This allows using instances
of SegmentTermPositions instead of SegmentTermDocs without additional costs.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-431">LUCENE-431</a>: RAMInputStream and RAMOutputStream extend IndexInput and
IndexOutput directly now. This avoids further buffering and thus avoids
unnecessary array copies.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-730">LUCENE-730</a>: Updated BooleanScorer2 to make use of BooleanScorer in some
cases and possibly improve scoring performance.  Documents can now be
delivered out-of-order as they are scored (e.g. to HitCollector).
N.B. A bit of code had to be disabled in QueryUtils in order for
TestBoolean2 test to keep passing.<br /><span class="attrib">(Paul Elschot via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-882">LUCENE-882</a>: Spellchecker doesn't store the ngrams anymore but only indexes
them to keep the spell index small.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-430">LUCENE-430</a>: Delay allocation of the buffer after a clone of BufferedIndexInput.
Together with <a href="http://issues.apache.org/jira/browse/LUCENE-888">LUCENE-888</a> this will allow to adjust the buffer size
dynamically.<br /><span class="attrib">(Paul Elschot, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-888">LUCENE-888</a>: Increase buffer sizes inside CompoundFileWriter and
BufferedIndexOutput.  Also increase buffer size in
BufferedIndexInput, but only when used during merging.  Together,
these increases yield 10-18% overall performance gain vs the
previous 1K defaults.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-866">LUCENE-866</a>: Adds multi-level skip lists to the posting lists. This speeds
up most queries that use skipTo(), especially on big indexes with large posting
lists. For average AND queries the speedup is about 20%, for queries that
contain very frequent and very unique terms the speedup can be over 80%.<br /><span class="attrib">(Michael Busch)</span></li>
    </ol>
  </li>
  <li><a id="2.2.0.documentation" href="javascript:toggleList('2.2.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(6)
    <ol id="2.2.0.documentation.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-791">LUCENE 791</a> &amp;&amp; <a href="http://issues.apache.org/jira/browse/INFRA-1173">INFRA-1173</a>: Infrastructure moved the Wiki to
http://wiki.apache.org/lucene-java/   Updated the links in the docs and
wherever else I found references.<br /><span class="attrib">(Grant Ingersoll, Joe Schaefer)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-807">LUCENE-807</a>: Fixed the javadoc for ScoreDocComparator.compare() to be
consistent with java.util.Comparator.compare(): Any integer is allowed to
be returned instead of only -1/0/1.<br /><span class="attrib">(Paul Cowan via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-875">LUCENE-875</a>: Solved javadoc warnings &amp; errors under jdk1.4.
Solved javadoc errors under jdk5 (jars in path for gdata).
Made "javadocs" target depend on "build-contrib" for first downloading
contrib jars configured for dynamic downloaded. (Note: when running
behind firewall, a firewall prompt might pop up)<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-740">LUCENE-740</a>: Added SNOWBALL-LICENSE.txt to the snowball package and a
remark about the license to NOTICE.TXT.<br /><span class="attrib">(Steven Parkes via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-925">LUCENE-925</a>: Added analysis package javadocs.<br /><span class="attrib">(Grant Ingersoll and Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-926">LUCENE-926</a>: Added document package javadocs.<br /><span class="attrib">(Grant Ingersoll)</span></li>
    </ol>
  </li>
  <li><a id="2.2.0.build" href="javascript:toggleList('2.2.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(10)
    <ol id="2.2.0.build.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-802">LUCENE-802</a>: Added LICENSE.TXT and NOTICE.TXT to Lucene jars.<br /><span class="attrib">(Steven Parkes via Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-885">LUCENE-885</a>: "ant test" now includes all contrib tests.  The new
"ant test-core" target can be used to run only the Core (non
contrib) tests.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-900">LUCENE-900</a>: "ant test" now enables Java assertions (in Lucene packages).<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-894">LUCENE-894</a>: Add custom build file for binary distributions that includes
targets to build the demos.<br /><span class="attrib">(Chris Hostetter, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-904">LUCENE-904</a>: The "package" targets in build.xml now also generate .md5
checksum files.<br /><span class="attrib">(Chris Hostetter, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-907">LUCENE-907</a>: Include LICENSE.TXT and NOTICE.TXT in the META-INF dirs of
demo war, demo jar, and the contrib jars.<br /><span class="attrib">(Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-909">LUCENE-909</a>: Demo targets for running the demo.<br /><span class="attrib">(Doron Cohen)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-908">LUCENE-908</a>: Improves content of MANIFEST file and makes it customizable
for the contribs. Adds SNOWBALL-LICENSE.txt to META-INF of the snowball
jar and makes sure that the lucli jar contains LICENSE.txt and NOTICE.txt.<br /><span class="attrib">(Chris Hostetter, Michael Busch)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-930">LUCENE-930</a>: Various contrib building improvements to ensure contrib
dependencies are met, and test compilation errors fail the build.<br /><span class="attrib">(Steven Parkes, Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-622">LUCENE-622</a>: Add ant target and pom.xml files for building maven artifacts
of the Lucene core and the contrib modules.<br /><span class="attrib">(Sami Siren, Karl Wettin, Michael Busch)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="2.1.0" href="javascript:toggleList('2.1.0')">Release 2.1.0  [2007-02-14]</a></h3>
<ul id="2.1.0.list">
  <li><a id="2.1.0.changes_in_runtime_behavior" href="javascript:toggleList('2.1.0.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(9)
    <ol id="2.1.0.changes_in_runtime_behavior.list">
      <li>'s' and 't' have been removed from the list of default stopwords
in StopAnalyzer (also used in by StandardAnalyzer). Having e.g. 's'
as a stopword meant that 's-class' led to the same results as 'class'.
Note that this problem still exists for 'a', e.g. in 'a-class' as
'a' continues to be a stopword.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-478">LUCENE-478</a>: Updated the list of Unicode code point ranges for CJK
(now split into CJ and K) in StandardAnalyzer.<br /><span class="attrib">(John Wang and
Steven Rowe via Otis Gospodnetic)</span></li>
      <li>Modified some CJK Unicode code point ranges in StandardTokenizer.jj,
and added a few more of them to increase CJK character coverage.
Also documented some of the ranges.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-489">LUCENE-489</a>: Add support for leading wildcard characters (*, ?) to
QueryParser.  Default is to disallow them, as before.<br /><span class="attrib">(Steven Parkes via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-703">LUCENE-703</a>: QueryParser changed to default to use of ConstantScoreRangeQuery
for range queries. Added useOldRangeQuery property to QueryParser to allow
selection of old RangeQuery class if required.<br /><span class="attrib">(Mark Harwood)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-543">LUCENE-543</a>: WildcardQuery now performs a TermQuery if the provided term
does not contain a wildcard character (? or *), when previously a
StringIndexOutOfBoundsException was thrown.<br /><span class="attrib">(Michael Busch via Erik Hatcher)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-726">LUCENE-726</a>: Removed the use of deprecated doc.fields() method and
Enumeration.<br /><span class="attrib">(Michael Busch via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-436">LUCENE-436</a>: Removed finalize() in TermInfosReader and SegmentReader,
and added a call to enumerators.remove() in TermInfosReader.close().
The finalize() overrides were added to help with a pre-1.4.2 JVM bug
that has since been fixed, plus we no longer support pre-1.4.2 JVMs.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-771">LUCENE-771</a>: The default location of the write lock is now the
index directory, and is named simply "write.lock" (without a big
digest prefix).  The system properties "org.apache.lucene.lockDir"
nor "java.io.tmpdir" are no longer used as the global directory
for storing lock files, and the LOCK_DIR field of FSDirectory is
now deprecated.<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.new_features" href="javascript:toggleList('2.1.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(15)
    <ol id="2.1.0.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-503">LUCENE-503</a>: New ThaiAnalyzer and ThaiWordFilter in contrib/analyzers<br /><span class="attrib">(Samphan Raruenrom via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-545">LUCENE-545</a>: New FieldSelector API and associated changes to
IndexReader and implementations.  New Fieldable interface for use
with the lazy field loading mechanism.<br /><span class="attrib">(Grant Ingersoll and Chuck
Williams via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-676">LUCENE-676</a>: Move Solr's PrefixFilter to Lucene core.<br /><span class="attrib">(Yura
Smolsky, Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-678">LUCENE-678</a>: Added NativeFSLockFactory, which implements locking
using OS native locking (via java.nio.*).<br /><span class="attrib">(Michael McCandless via
Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-544">LUCENE-544</a>: Added the ability to specify different boosts for
different fields when using MultiFieldQueryParser<br /><span class="attrib">(Matt Ericson
via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-528">LUCENE-528</a>: New IndexWriter.addIndexesNoOptimize() that doesn't
optimize the index when adding new segments, only performing
merges as needed.<br /><span class="attrib">(Ning Li via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-573">LUCENE-573</a>: QueryParser now allows backslash escaping in
quoted terms and phrases.<br /><span class="attrib">(Michael Busch via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-716">LUCENE-716</a>: QueryParser now allows specification of Unicode
characters in terms via a unicode escape of the form \uXXXX<br /><span class="attrib">(Michael Busch via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-709">LUCENE-709</a>: Added RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes()
and IndexWriter.flushRamSegments(), allowing applications to
control the amount of memory used to buffer documents.<br /><span class="attrib">(Chuck Williams via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-723">LUCENE-723</a>: QueryParser now parses *:* as MatchAllDocsQuery<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-741">LUCENE-741</a>: Command-line utility for modifying or removing norms
on fields in an existing index.  This is mostly based on <a href="http://issues.apache.org/jira/browse/LUCENE-496">LUCENE-496</a>
and lives in contrib/miscellaneous.<br /><span class="attrib">(Chris Hostetter, Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-759">LUCENE-759</a>: Added NGramTokenizer and EdgeNGramTokenizer classes and
their passing unit tests.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-565">LUCENE-565</a>: Added methods to IndexWriter to more efficiently
handle updating documents (the "delete then add" use case).  This
is intended to be an eventual replacement for the existing
IndexModifier.  Added IndexWriter.flush() (renamed from
flushRamSegments()) to flush all pending updates (held in RAM), to
the Directory.<br /><span class="attrib">(Ning Li via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-762">LUCENE-762</a>: Added in SIZE and SIZE_AND_BREAK FieldSelectorResult options
which allow one to retrieve the size of a field without retrieving the
actual field.<br /><span class="attrib">(Chuck Williams via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-799">LUCENE-799</a>: Properly handle lazy, compressed fields.<br /><span class="attrib">(Mike Klaas via Grant Ingersoll)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.api_changes" href="javascript:toggleList('2.1.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(19)
    <ol id="2.1.0.api_changes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-438">LUCENE-438</a>: Remove "final" from Token, implement Cloneable, allow
changing of termText via setTermText().<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li>org.apache.lucene.analysis.nl.WordlistLoader has been deprecated
and is supposed to be replaced with the WordlistLoader class in
package org.apache.lucene.analysis<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-609">LUCENE-609</a>: Revert return type of Document.getField(s) to Field
for backward compatibility, added new Document.getFieldable(s)
for access to new lazy loaded fields.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-608">LUCENE-608</a>: Document.fields() has been deprecated and a new method
Document.getFields() has been added that returns a List instead of
an Enumeration<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-605">LUCENE-605</a>: New Explanation.isMatch() method and new ComplexExplanation
subclass allows explain methods to produce Explanations which model
"matching" independent of having a positive value.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-621">LUCENE-621</a>: New static methods IndexWriter.setDefaultWriteLockTimeout
and IndexWriter.setDefaultCommitLockTimeout for overriding default
timeout values for all future instances of IndexWriter (as well
as for any other classes that may reference the static values,
ie: IndexReader).<br /><span class="attrib">(Michael McCandless via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-638">LUCENE-638</a>: FSDirectory.list() now only returns the directory's
Lucene-related files. Thanks to this change one can now construct
a RAMDirectory from a file system directory that contains files
not related to Lucene.<br /><span class="attrib">(Simon Willnauer via Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-635">LUCENE-635</a>: Decoupling locking implementation from Directory
implementation.  Added set/getLockFactory to Directory and moved
all locking code into subclasses of abstract class LockFactory.
FSDirectory and RAMDirectory still default to their prior locking
implementations, but now you can mix &amp; match, for example using
SingleInstanceLockFactory (ie, in memory locking) locking with an
FSDirectory.  Note that now you must call setDisableLocks before
the instantiation a FSDirectory if you wish to disable locking
for that Directory.<br /><span class="attrib">(Michael McCandless, Jeff Patterson via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-657">LUCENE-657</a>: Made FuzzyQuery non-final and inner ScoreTerm protected.<br /><span class="attrib">(Steven Parkes via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-701">LUCENE-701</a>: Lockless commits: a commit lock is no longer required
when a writer commits and a reader opens the index.  This includes
a change to the index file format (see docs/fileformats.html for
details).  It also removes all APIs associated with the commit
lock &amp; its timeout.  Readers are now truly read-only and do not
block one another on startup.  This is the first step to getting
Lucene to work correctly over NFS (second step is
<a href="http://issues.apache.org/jira/browse/LUCENE-710">LUCENE-710</a>).<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-722">LUCENE-722</a>: DEFAULT_MIN_DOC_FREQ was misspelled DEFALT_MIN_DOC_FREQ
in Similarity's MoreLikeThis class. The misspelling has been
replaced by the correct spelling.<br /><span class="attrib">(Andi Vajda via Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-738">LUCENE-738</a>: Reduce the size of the file that keeps track of which
documents are deleted when the number of deleted documents is
small.  This changes the index file format and cannot be
read by previous versions of Lucene.<br /><span class="attrib">(Doron Cohen via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-756">LUCENE-756</a>: Maintain all norms in a single .nrm file to reduce the
number of open files and file descriptors for the non-compound index
format.  This changes the index file format, but maintains the
ability to read and update older indices. The first segment merge
on an older format index will create a single .nrm file for the new
segment.<br /><span class="attrib">(Doron Cohen via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-732">LUCENE-732</a>: DateTools support has been added to QueryParser, with
setters for both the default Resolution, and per-field Resolution.
For backwards compatibility, DateField is still used if no Resolutions
are specified.<br /><span class="attrib">(Michael Busch via Chris Hostetter)</span></li>
      <li>Added isOptimized() method to IndexReader.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-773">LUCENE-773</a>: Deprecate the FSDirectory.getDirectory(*) methods that
take a boolean "create" argument.  Instead you should use
IndexWriter's "create" argument to create a new index.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-780">LUCENE-780</a>: Add a static Directory.copy() method to copy files
from one Directory to another.<br /><span class="attrib">(Jiri Kuhn via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-773">LUCENE-773</a>: Added Directory.clearLock(String name) to forcefully
remove an old lock.  The default implementation is to ask the
lockFactory (if non null) to clear the lock.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-795">LUCENE-795</a>: Directory.renameFile() has been deprecated as it is
not used anymore inside Lucene.<br /><span class="attrib">(Daniel Naber)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.bug_fixes" href="javascript:toggleList('2.1.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(32)
    <ol id="2.1.0.bug_fixes.list">
      <li>Fixed the web application demo (built with "ant war-demo") which
didn't work because it used a QueryParser method that had
been removed<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-583">LUCENE-583</a>: ISOLatin1AccentFilter fails to preserve positionIncrement<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-575">LUCENE-575</a>: SpellChecker min score is incorrectly changed by suggestSimilar<br /><span class="attrib">(Karl Wettin via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-587">LUCENE-587</a>: Explanation.toHtml was producing malformed HTML<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li>Fix to allow MatchAllDocsQuery to be used with RemoteSearcher<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-601">LUCENE-601</a>: RAMDirectory and RAMFile made Serializable<br /><span class="attrib">(Karl Wettin via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-557">LUCENE-557</a>: Fixes to BooleanQuery and FilteredQuery so that the score
Explanations match up with the real scores.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-607">LUCENE-607</a>: ParallelReader's TermEnum fails to advance properly to
new fields<br /><span class="attrib">(Chuck Williams, Christian Kohlschuetter via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-610">LUCENE-610</a>,<a href="http://issues.apache.org/jira/browse/LUCENE-611">LUCENE-611</a>: Simple syntax changes to allow compilation with ecj:
disambiguate inner class scorer's use of doc() in BooleanScorer2,
other test code changes.<br /><span class="attrib">(DM Smith via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-451">LUCENE-451</a>: All core query types now use ComplexExplanations so that
boosts of zero don't confuse the BooleanWeight explain method.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-593">LUCENE-593</a>: Fixed LuceneDictionary's inner Iterator<br /><span class="attrib">(Kåre Fiedler Christiansen via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-641">LUCENE-641</a>: fixed an off-by-one bug with IndexWriter.setMaxFieldLength()<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-659">LUCENE-659</a>: Make PerFieldAnalyzerWrapper delegate getPositionIncrementGap()
to the correct analyzer for the field.<br /><span class="attrib">(Chuck Williams via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-650">LUCENE-650</a>: Fixed NPE in Locale specific String Sort when Document
has no value.<br /><span class="attrib">(Oliver Hutchison via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-683">LUCENE-683</a>: Fixed data corruption when reading lazy loaded fields.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-678">LUCENE-678</a>: Fixed bug in NativeFSLockFactory which caused the same
lock to be shared between different directories.<br /><span class="attrib">(Michael McCandless via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-690">LUCENE-690</a>: Fixed thread unsafe use of IndexInput by lazy loaded fields.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-696">LUCENE-696</a>: Fix bug when scorer for DisjunctionMaxQuery has skipTo()
called on it before next().<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-569">LUCENE-569</a>: Fixed SpanNearQuery bug, for 'inOrder' queries it would fail
to recognize ordered spans if they overlapped with unordered spans.<br /><span class="attrib">(Paul Elschot via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-706">LUCENE-706</a>: Updated fileformats.xml|html concerning the docdelta value
in the frequency file.<br /><span class="attrib">(Johan Stuyts, Doron Cohen via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-715">LUCENE-715</a>: Fixed private constructor in IndexWriter.java to
properly release the acquired write lock if there is an
IOException after acquiring the write lock but before finishing
instantiation.<br /><span class="attrib">(Matthew Bogosian via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-651">LUCENE-651</a>: Multiple different threads requesting the same
FieldCache entry (often for Sorting by a field) at the same
time caused multiple generations of that entry, which was
detrimental to performance and memory use.<br /><span class="attrib">(Oliver Hutchison via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-717">LUCENE-717</a>: Fixed build.xml not to fail when there is no lib dir.<br /><span class="attrib">(Doron Cohen via Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-728">LUCENE-728</a>: Removed duplicate/old MoreLikeThis and SimilarityQueries
classes from contrib/similarity, as their new home is under
contrib/queries.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-669">LUCENE-669</a>: Do not double-close the RandomAccessFile in
FSIndexInput/Output during finalize().  Besides sending an
IOException up to the GC, this may also be the cause intermittent
"The handle is invalid" IOExceptions on Windows when trying to
close readers or writers.<br /><span class="attrib">(Michael Busch via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-702">LUCENE-702</a>: Fix IndexWriter.addIndexes(*) to not corrupt the index
on any exceptions (eg disk full).  The semantics of these methods
is now transactional: either all indices are merged or none are.
Also fixed IndexWriter.mergeSegments (called outside of
addIndexes(*) by addDocument, optimize, flushRamSegments) and
IndexReader.commit() (called by close) to clean up and keep the
instance state consistent to what's actually in the index<br /><span class="attrib">(Mike
McCandless)</span>.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-129">LUCENE-129</a>: Change finalizers to do "try {...} finally
{super.finalize();}" to make sure we don't miss finalizers in
classes above us.<br /><span class="attrib">(Esmond Pitt via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-754">LUCENE-754</a>: Fix a problem introduced by <a href="http://issues.apache.org/jira/browse/LUCENE-651">LUCENE-651</a>, causing
IndexReaders to hang around forever, in addition to not
fixing the original FieldCache performance problem.<br /><span class="attrib">(Chris Hostetter, Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-140">LUCENE-140</a>: Fix IndexReader.deleteDocument(int docNum) to
correctly raise ArrayIndexOutOfBoundsException when docNum is too
large.  Previously, if docNum was only slightly too large (within
the same multiple of 8, ie, up to 7 ints beyond maxDoc), no
exception would be raised and instead the index would become
silently corrupted.  The corruption then only appears much later,
in mergeSegments, when the corrupted segment is merged with
segment(s) after it.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-768">LUCENE-768</a>: Fix case where an Exception during deleteDocument,
undeleteAll or setNorm in IndexReader could leave the reader in a
state where close() fails to release the write lock.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li>Remove "tvp" from known index file extensions because it is
never used.<br /><span class="attrib">(Nicolas Lalevée via Bernhard Messer)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-767">LUCENE-767</a>: Change how SegmentReader.maxDoc() is computed to not
rely on file length check and instead use the SegmentInfo's
docCount that's already stored explicitly in the index.  This is a
defensive bug fix (ie, there is no known problem seen "in real
life" due to this, just a possible future problem).<br /><span class="attrib">(Chuck
Williams via Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.optimizations" href="javascript:toggleList('2.1.0.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(16)
    <ol id="2.1.0.optimizations.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-586">LUCENE-586</a>: TermDocs.skipTo() is now more efficient for
multi-segment indexes.  This will improve the performance of many
types of queries against a non-optimized index.<br /><span class="attrib">(Andrew Hudson
via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-623">LUCENE-623</a>: RAMDirectory.close now nulls out its reference to all
internal "files", allowing them to be GCed even if references to the
RAMDirectory itself still exist.<br /><span class="attrib">(Nadav Har'El via Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-629">LUCENE-629</a>: Compressed fields are no longer uncompressed and
recompressed during segment merges (e.g. during indexing or
optimizing), thus improving performance .<br /><span class="attrib">(Michael Busch via Otis
Gospodnetic)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-388">LUCENE-388</a>: Improve indexing performance when maxBufferedDocs is
large by keeping a count of buffered documents rather than
counting after each document addition.<br /><span class="attrib">(Doron Cohen, Paul Smith,
Yonik Seeley)</span></li>
      <li>Modified TermScorer.explain to use TermDocs.skipTo() instead of
looping through docs.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-672">LUCENE-672</a>: New indexing segment merge policy flushes all
buffered docs to their own segment and delays a merge until
mergeFactor segments of a certain level have been accumulated.
This increases indexing performance in the presence of deleted
docs or partially full segments as well as enabling future
optimizations.
<p/>
NOTE: this also fixes an "under-merging" bug whereby it is
possible to get far too many segments in your index (which will
drastically slow down search, risks exhausting file descriptor
limit, etc.).  This can happen when the number of buffered docs
at close, plus the number of docs in the last non-ram segment is
greater than mergeFactor.<br /><span class="attrib">(Ning Li, Yonik Seeley)</span></li>
      <li>Lazy loaded fields unnecessarily retained an extra copy of loaded
String data.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-443">LUCENE-443</a>: ConjunctionScorer performance increase.  Speed up
any BooleanQuery with more than one mandatory clause.<br /><span class="attrib">(Abdul Chaudhry, Paul Elschot via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-365">LUCENE-365</a>: DisjunctionSumScorer performance increase of
~30%. Speeds up queries with optional clauses.<br /><span class="attrib">(Paul Elschot via
Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-695">LUCENE-695</a>: Optimized BufferedIndexInput.readBytes() for medium
size buffers, which will speed up merging and retrieving binary
and compressed fields.<br /><span class="attrib">(Nadav Har'El via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-687">LUCENE-687</a>: Lazy skipping on proximity file speeds up most
queries involving term positions, including phrase queries.<br /><span class="attrib">(Michael Busch via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-714">LUCENE-714</a>: Replaced 2 cases of manual for-loop array copying
with calls to System.arraycopy instead, in DocumentWriter.java.<br /><span class="attrib">(Nicolas Lalevee via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-729">LUCENE-729</a>: Non-recursive skipTo and next implementation of
TermDocs for a MultiReader.  The old implementation could
recurse up to the number of segments in the index.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-739">LUCENE-739</a>: Improve segment merging performance by reusing
the norm array across different fields and doing bulk writes
of norms of segments with no deleted docs.<br /><span class="attrib">(Michael Busch via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-745">LUCENE-745</a>: Add BooleanQuery.clauses(), allowing direct access
to the List of clauses and replaced the internal synchronized Vector
with an unsynchronized List.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-750">LUCENE-750</a>: Remove finalizers from FSIndexOutput and move the
FSIndexInput finalizer to the actual file so all clones don't
register a new finalizer.<br /><span class="attrib">(Yonik Seeley)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.test_cases" href="javascript:toggleList('2.1.0.test_cases')">Test Cases</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.1.0.test_cases.list">
      <li>Added TestTermScorer.java<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li>Added TestWindowsMMap.java<br /><span class="attrib">(Benson Margulies via Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-744">LUCENE-744</a> Append the user.name property onto the temporary directory
that is created so it doesn't interfere with other users.<br /><span class="attrib">(Grant Ingersoll)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.documentation" href="javascript:toggleList('2.1.0.documentation')">Documentation</a>&nbsp;&nbsp;&nbsp;(11)
    <ol id="2.1.0.documentation.list">
      <li>Added style sheet to xdocs named lucene.css and included in the
Anakia VSL descriptor.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li>Added scoring.xml document into xdocs.  Updated Similarity.java
scoring formula.<br /><span class="attrib">(Grant Ingersoll and Steve Rowe.  Updates from:
Michael McCandless, Doron Cohen, Chris Hostetter, Doug Cutting)</span>.
<a href="http://issues.apache.org/jira/browse/LUCENE-664">Issue 664</a>.
</li>
      <li>Added javadocs for FieldSelectorResult.java.<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li>Moved xdocs directory to src/site/src/documentation/content/xdocs per
<a href="http://issues.apache.org/jira/browse/LUCENE-707">Issue 707</a>.  Site now builds using Forrest, just like the other Lucene
siblings.  See http://wiki.apache.org/jakarta-lucene/HowToUpdateTheWebsite
for info on updating the website.<br /><span class="attrib">(Grant Ingersoll with help from Steve Rowe,
Chris Hostetter, Doug Cutting, Otis Gospodnetic, Yonik Seeley)</span></li>
      <li>Added in Developer and System Requirements sections under Resources<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-713">LUCENE-713</a> Updated the Term Vector section of File Formats to include
documentation on how Offset and Position info are stored in the TVF file.<br /><span class="attrib">(Grant Ingersoll, Samir Abdou)</span></li>
      <li>Added in link to Clover Test Code Coverage Reports under the Develop
section in Resources<br /><span class="attrib">(Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-748">LUCENE-748</a>: Added details for semantics of IndexWriter.close on
hitting an Exception.<br /><span class="attrib">(Jed Wesley-Smith via Mike McCandless)</span></li>
      <li>Added some text about what is contained in releases.<br /><span class="attrib">(Eric Haszlakiewicz via Grant Ingersoll)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-758">LUCENE-758</a>: Fix javadoc to clarify that RAMDirectory(Directory)
makes a full copy of the starting Directory.<br /><span class="attrib">(Mike McCandless)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-764">LUCENE-764</a>: Fix javadocs to detail temporary space requirements
for IndexWriter's optimize(), addIndexes(*) and addDocument(...)
methods.<br /><span class="attrib">(Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.1.0.build" href="javascript:toggleList('2.1.0.build')">Build</a>&nbsp;&nbsp;&nbsp;(3)
    <ol id="2.1.0.build.list">
      <li>Added in clover test code coverage per <a href="http://issues.apache.org/jira/browse/LUCENE-721">LUCENE-721</a>
To enable clover code coverage, you must have clover.jar in the ANT
classpath and specify -Drun.clover=true on the command line.<br /><span class="attrib">(Michael Busch and Grant Ingersoll)</span></li>
      <li>Added a sysproperty in common-build.xml per <a href="http://issues.apache.org/jira/browse/LUCENE-752">Lucene 752</a> to map java.io.tmpdir to
${build.dir}/test just like the tempDir sysproperty.
</li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-757">LUCENE-757</a> Added new target named init-dist that does setup for
distribution of both binary and source distributions.  Called by package
and package-*-src
</li>
    </ol>
  </li>
</ul>
<h3><a id="2.0.0" href="javascript:toggleList('2.0.0')">Release 2.0.0  [2006-05-26]</a></h3>
<ul id="2.0.0.list">
  <li><a id="2.0.0.api_changes" href="javascript:toggleList('2.0.0.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(4)
    <ol id="2.0.0.api_changes.list">
      <li>All deprecated methods and fields have been removed, except
DateField, which will still be supported for some time
so Lucene can read its date fields from old indexes<br /><span class="attrib">(Yonik Seeley &amp; Grant Ingersoll)</span></li>
      <li>DisjunctionSumScorer is no longer public.<br /><span class="attrib">(Paul Elschot via Otis Gospodnetic)</span></li>
      <li>Creating a Field with both an empty name and an empty value
now throws an IllegalArgumentException<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-301">LUCENE-301</a>: Added new IndexWriter({String,File,Directory},
Analyzer) constructors that do not take a boolean "create"
argument.  These new constructors will create a new index if
necessary, else append to the existing one.<br /><span class="attrib">(Dan Armbrust via
Mike McCandless)</span></li>
    </ol>
  </li>
  <li><a id="2.0.0.new_features" href="javascript:toggleList('2.0.0.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="2.0.0.new_features.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-496">LUCENE-496</a>: Command line tool for modifying the field norms of an
existing index; added to contrib/miscellaneous.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-577">LUCENE-577</a>: SweetSpotSimilarity added to contrib/miscellaneous.<br /><span class="attrib">(Chris Hostetter)</span></li>
    </ol>
  </li>
  <li><a id="2.0.0.bug_fixes" href="javascript:toggleList('2.0.0.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(16)
    <ol id="2.0.0.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-330">LUCENE-330</a>: Fix issue of FilteredQuery not working properly within
BooleanQuery.<br /><span class="attrib">(Paul Elschot via Erik Hatcher)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-515">LUCENE-515</a>: Make ConstantScoreRangeQuery and ConstantScoreQuery work
with RemoteSearchable.<br /><span class="attrib">(Philippe Laflamme via Yonik Seeley)</span></li>
      <li>Added methods to get/set writeLockTimeout and commitLockTimeout in
IndexWriter. These could be set in Lucene 1.4 using a system property.
This feature had been removed without adding the corresponding
getter/setter methods.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-413">LUCENE-413</a>: Fixed ArrayIndexOutOfBoundsException exceptions
when using SpanQueries.<br /><span class="attrib">(Paul Elschot via Yonik Seeley)</span></li>
      <li>Implemented FilterIndexReader.getVersion() and isCurrent()<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-540">LUCENE-540</a>: Fixed a bug with IndexWriter.addIndexes(Directory[])
that sometimes caused the index order of documents to change.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-526">LUCENE-526</a>: Fixed a bug in FieldSortedHitQueue that caused
subsequent String sorts with different locales to sort identically.<br /><span class="attrib">(Paul Cowan via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-541">LUCENE-541</a>: Add missing extractTerms() to DisjunctionMaxQuery<br /><span class="attrib">(Stefan Will via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-514">LUCENE-514</a>: Added getTermArrays() and extractTerms() to
MultiPhraseQuery<br /><span class="attrib">(Eric Jain &amp; Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-512">LUCENE-512</a>: Fixed ClassCastException in ParallelReader.getTermFreqVectors<br /><span class="attrib">(frederic via Yonik)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-352">LUCENE-352</a>: Fixed bug in SpanNotQuery that manifested as
NullPointerException when "exclude" query was not a SpanTermQuery.<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-572">LUCENE-572</a>: Fixed bug in SpanNotQuery hashCode, was ignoring exclude clause<br /><span class="attrib">(Chris Hostetter)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-561">LUCENE-561</a>: Fixed some ParallelReader bugs. NullPointerException if the reader
didn't know about the field yet, reader didn't keep track if it had deletions,
and deleteDocument calls could circumvent synchronization on the subreaders.<br /><span class="attrib">(Chuck Williams via Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-556">LUCENE-556</a>: Added empty extractTerms() implementation to MatchAllDocsQuery and
ConstantScoreQuery in order to allow their use with a MultiSearcher.<br /><span class="attrib">(Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-546">LUCENE-546</a>: Removed 2GB file size limitations for RAMDirectory.<br /><span class="attrib">(Peter Royal, Michael Chan, Yonik Seeley)</span></li>
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-485">LUCENE-485</a>: Don't hold commit lock while removing obsolete index
files.<br /><span class="attrib">(Luc Vanlerberghe via cutting)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="1.9.1" href="javascript:toggleList('1.9.1')">Release 1.9.1  [2006-03-02]</a></h3>
<ul id="1.9.1.list">
  <li><a id="1.9.1.bug_fixes" href="javascript:toggleList('1.9.1.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="1.9.1.bug_fixes.list">
      <li><a href="http://issues.apache.org/jira/browse/LUCENE-511">LUCENE-511</a>: Fix a bug in the BufferedIndexOutput optimization
introduced in 1.9-final.<br /><span class="attrib">(Shay Banon &amp; Steven Tamm via cutting)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="1.9_final" href="javascript:toggleList('1.9_final')">Release 1.9 final  [2006-02-27]</a></h3>
<ul id="1.9_final.list">
      <li>Note that this release is mostly but not 100% source compatible with
the previous release of Lucene (1.4.3). In other words, you should
make sure your application compiles with this version of Lucene before
you replace the old Lucene JAR with the new one.  Many methods have
been deprecated in anticipation of release 2.0, so deprecation
warnings are to be expected when upgrading from 1.4.3 to 1.9.
</li>
  </li>
  <li><a id="1.9_final.bug_fixes" href="javascript:toggleList('1.9_final.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="1.9_final.bug_fixes.list">
      <li>The fix that made IndexWriter.setMaxBufferedDocs(1) work had negative
effects on indexing performance and has thus been reverted. The
argument for setMaxBufferedDocs(int) must now at least be 2, otherwise
an exception is thrown.<br /><span class="attrib">(Daniel Naber)</span></li>
    </ol>
  </li>
  <li><a id="1.9_final.optimizations" href="javascript:toggleList('1.9_final.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="1.9_final.optimizations.list">
      <li>Optimized BufferedIndexOutput.writeBytes() to use
System.arraycopy() in more cases, rather than copying byte-by-byte.<br /><span class="attrib">(Lukas Zapletal via Cutting)</span></li>
    </ol>
  </li>
</ul>
<h3><a id="1.9_rc1" href="javascript:toggleList('1.9_rc1')">Release 1.9 RC1  [2006-02-21]</a></h3>
<ul id="1.9_rc1.list">
  <li><a id="1.9_rc1.requirements" href="javascript:toggleList('1.9_rc1.requirements')">Requirements</a>&nbsp;&nbsp;&nbsp;(1)
    <ol id="1.9_rc1.requirements.list">
      <li>To compile and use Lucene you now need Java 1.4 or later.
</li>
    </ol>
  </li>
  <li><a id="1.9_rc1.changes_in_runtime_behavior" href="javascript:toggleList('1.9_rc1.changes_in_runtime_behavior')">Changes in runtime behavior</a>&nbsp;&nbsp;&nbsp;(9)
    <ol id="1.9_rc1.changes_in_runtime_behavior.list">
      <li>FuzzyQuery can no longer throw a TooManyClauses exception. If a
FuzzyQuery expands to more than BooleanQuery.maxClauseCount
terms only the BooleanQuery.maxClauseCount most similar terms
go into the rewritten query and thus the exception is avoided.<br /><span class="attrib">(Christoph)</span></li>
      <li>Changed system property from "org.apache.lucene.lockdir" to
"org.apache.lucene.lockDir", so that its casing follows the existing
pattern used in other Lucene system properties.<br /><span class="attrib">(Bernhard)</span></li>
      <li>The terms of RangeQueries and FuzzyQueries are now converted to
lowercase by default (as it has been the case for PrefixQueries
and WildcardQueries before). Use setLowercaseExpandedTerms(false)
to disable that behavior but note that this also affects
PrefixQueries and WildcardQueries.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Document frequency that is computed when MultiSearcher is used is now
computed correctly and "globally" across subsearchers and indices, while
before it used to be computed locally to each index, which caused
ranking across multiple indices not to be equivalent.<br /><span class="attrib">(Chuck Williams, Wolf Siberski via Otis, <a href="http://issues.apache.org/jira/browse/LUCENE-295">bug #31841&nbsp;[LUCENE-295]</a>)</span></li>
      <li>When opening an IndexWriter with create=true, Lucene now only deletes
its own files from the index directory (looking at the file name suffixes
to decide if a file belongs to Lucene). The old behavior was to delete
all files.<br /><span class="attrib">(Daniel Naber and Bernhard Messer, <a href="http://issues.apache.org/jira/browse/LUCENE-385">bug #34695&nbsp;[LUCENE-385]</a>)</span></li>
      <li>The version of an IndexReader, as returned by getCurrentVersion()
and getVersion() doesn't start at 0 anymore for new indexes. Instead, it
is now initialized by the system time in milliseconds.<br /><span class="attrib">(Bernhard Messer via Daniel Naber)</span></li>
      <li>Several default values cannot be set via system properties anymore, as
this has been considered inappropriate for a library like Lucene. For
most properties there are set/get methods available in IndexWriter which
you should use instead. This affects the following properties:
See IndexWriter for getter/setter methods:
  org.apache.lucene.writeLockTimeout, org.apache.lucene.commitLockTimeout,
  org.apache.lucene.minMergeDocs, org.apache.lucene.maxMergeDocs,
  org.apache.lucene.maxFieldLength, org.apache.lucene.termIndexInterval,
  org.apache.lucene.mergeFactor,
See BooleanQuery for getter/setter methods:
  org.apache.lucene.maxClauseCount
See FSDirectory for getter/setter methods:
  disableLuceneLocks<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Fixed FieldCacheImpl to use user-provided IntParser and FloatParser,
instead of using Integer and Float classes for parsing.<br /><span class="attrib">(Yonik Seeley via Otis Gospodnetic)</span></li>
      <li>Expert level search routines returning TopDocs and TopFieldDocs
no longer normalize scores.  This also fixes bugs related to
MultiSearchers and score sorting/normalization.<br /><span class="attrib">(Luc Vanlerberghe via Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-469">LUCENE-469</a>)</span></li>
    </ol>
  </li>
  <li><a id="1.9_rc1.new_features" href="javascript:toggleList('1.9_rc1.new_features')">New features</a>&nbsp;&nbsp;&nbsp;(33)
    <ol id="1.9_rc1.new_features.list">
      <li>Added support for stored compressed fields (<a href="http://issues.apache.org/jira/browse/LUCENE-274">patch #31149&nbsp;[LUCENE-274]</a>)<br /><span class="attrib">(Bernhard Messer via Christoph)</span></li>
      <li>Added support for binary stored fields (<a href="http://issues.apache.org/jira/browse/LUCENE-229">patch #29370&nbsp;[LUCENE-229]</a>)<br /><span class="attrib">(Drew Farris and Bernhard Messer via Christoph)</span></li>
      <li>Added support for position and offset information in term vectors
(<a href="http://issues.apache.org/jira/browse/LUCENE-95">patch #18927&nbsp;[LUCENE-95]</a>).<br /><span class="attrib">(Grant Ingersoll &amp; Christoph)</span></li>
      <li>A new class DateTools has been added. It allows you to format dates
in a readable format adequate for indexing. Unlike the existing
DateField class DateTools can cope with dates before 1970 and it
forces you to specify the desired date resolution (e.g. month, day,
second, ...) which can make RangeQuerys on those fields more efficient.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>QueryParser now correctly works with Analyzers that can return more
than one token per position. For example, a query "+fast +car"
would be parsed as "+fast +(car automobile)" if the Analyzer
returns "car" and "automobile" at the same position whenever it
finds "car" (<a href="http://issues.apache.org/jira/browse/LUCENE-133">Patch #23307&nbsp;[LUCENE-133]</a>).<br /><span class="attrib">(Pierrick Brihaye, Daniel Naber)</span></li>
      <li>Permit unbuffered Directory implementations (e.g., using mmap).
InputStream is replaced by the new classes IndexInput and
BufferedIndexInput.  OutputStream is replaced by the new classes
IndexOutput and BufferedIndexOutput.  InputStream and OutputStream
are now deprecated and FSDirectory is now subclassable.<br /><span class="attrib">(cutting)</span></li>
      <li>Add native Directory and TermDocs implementations that work under
GCJ.  These require GCC 3.4.0 or later and have only been tested
on Linux.  Use 'ant gcj' to build demo applications.<br /><span class="attrib">(cutting)</span></li>
      <li>Add MMapDirectory, which uses nio to mmap input files.  This is
still somewhat slower than FSDirectory.  However it uses less
memory per query term, since a new buffer is not allocated per
term, which may help applications which use, e.g., wildcard
queries.  It may also someday be faster.<br /><span class="attrib">(cutting &amp; Paul Elschot)</span></li>
      <li>Added javadocs-internal to build.xml - <a href="http://issues.apache.org/jira/browse/LUCENE-250">bug #30360&nbsp;[LUCENE-250]</a><br /><span class="attrib">(Paul Elschot via Otis)</span></li>
      <li>Added RangeFilter, a more generically useful filter than DateFilter.<br /><span class="attrib">(Chris M Hostetter via Erik)</span></li>
      <li>Added NumberTools, a utility class indexing numeric fields.<br /><span class="attrib">(adapted from code contributed by Matt Quail; committed by Erik)</span></li>
      <li>Added public static IndexReader.main(String[] args) method.
IndexReader can now be used directly at command line level
to list and optionally extract the individual files from an existing
compound index file.<br /><span class="attrib">(adapted from code contributed by Garrett Rooney; committed by Bernhard)</span></li>
      <li>Add IndexWriter.setTermIndexInterval() method.  See javadocs.<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Added LucenePackage, whose static get() method returns java.util.Package,
which lets the caller get the Lucene version information specified in
the Lucene Jar.<br /><span class="attrib">(Doug Cutting via Otis)</span></li>
      <li>Added Hits.iterator() method and corresponding HitIterator and Hit objects.
This provides standard java.util.Iterator iteration over Hits.
Each call to the iterator's next() method returns a Hit object.<br /><span class="attrib">(Jeremy Rayner via Erik)</span></li>
      <li>Add ParallelReader, an IndexReader that combines separate indexes
over different fields into a single virtual index.<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Add IntParser and FloatParser interfaces to FieldCache, so that
fields in arbitrarily formats can be cached as ints and floats.<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Added class org.apache.lucene.index.IndexModifier which combines
IndexWriter and IndexReader, so you can add and delete documents without
worrying about synchronization/locking issues.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Lucene can now be used inside an unsigned applet, as Lucene's access
to system properties will not cause a SecurityException anymore.<br /><span class="attrib">(Jon Schuster via Daniel Naber, <a href="http://issues.apache.org/jira/browse/LUCENE-369">bug #34359&nbsp;[LUCENE-369]</a>)</span></li>
      <li>Added a new class MatchAllDocsQuery that matches all documents.<br /><span class="attrib">(John Wang via Daniel Naber, <a href="http://issues.apache.org/jira/browse/LUCENE-389">bug #34946&nbsp;[LUCENE-389]</a>)</span></li>
      <li>Added ability to omit norms on a per field basis to decrease
index size and memory consumption when there are many indexed fields.
See Field.setOmitNorms()<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-448">LUCENE-448</a>)</span></li>
      <li>Added NullFragmenter to contrib/highlighter, which is useful for
highlighting entire documents or fields.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Added regular expression queries, RegexQuery and SpanRegexQuery.
Note the same term enumeration caveats apply with these queries as
apply to WildcardQuery and other term expanding queries.
These two new queries are not currently supported via QueryParser.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Added ConstantScoreQuery which wraps a filter and produces a score
equal to the query boost for every matching document.<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-383">LUCENE-383</a>)</span></li>
      <li>Added ConstantScoreRangeQuery which produces a constant score for
every document in the range.  One advantage over a normal RangeQuery
is that it doesn't expand to a BooleanQuery and thus doesn't have a maximum
number of terms the range can cover.  Both endpoints may also be open.<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-383">LUCENE-383</a>)</span></li>
      <li>Added ability to specify a minimum number of optional clauses that
must match in a BooleanQuery.  See BooleanQuery.setMinimumNumberShouldMatch().<br /><span class="attrib">(Paul Elschot, Chris Hostetter via Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-395">LUCENE-395</a>)</span></li>
      <li>Added DisjunctionMaxQuery which provides the maximum score across its clauses.
It's very useful for searching across multiple fields.<br /><span class="attrib">(Chuck Williams via Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-323">LUCENE-323</a>)</span></li>
      <li>New class ISOLatin1AccentFilter that replaces accented characters in the ISO
Latin 1 character set by their unaccented equivalent.<br /><span class="attrib">(Sven Duzont via Erik Hatcher)</span></li>
      <li>New class KeywordAnalyzer. "Tokenizes" the entire stream as a single token.
This is useful for data like zip codes, ids, and some product names.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Copied LengthFilter from contrib area to core. Removes words that are too
long and too short from the stream.<br /><span class="attrib">(David Spencer via Otis and Daniel)</span></li>
      <li>Added getPositionIncrementGap(String fieldName) to Analyzer.  This allows
custom analyzers to put gaps between Field instances with the same field
name, preventing phrase or span queries crossing these boundaries.  The
default implementation issues a gap of 0, allowing the default token
position increment of 1 to put the next field's first token into a
successive position.<br /><span class="attrib">(Erik Hatcher, with advice from Yonik)</span></li>
      <li>StopFilter can now ignore case when checking for stop words.<br /><span class="attrib">(Grant Ingersoll via Yonik, <a href="http://issues.apache.org/jira/browse/LUCENE-248">LUCENE-248</a>)</span></li>
      <li>Add TopDocCollector and TopFieldDocCollector.  These simplify the
implementation of hit collectors that collect only the
top-scoring or top-sorting hits.
</li>
    </ol>
  </li>
  <li><a id="1.9_rc1.api_changes" href="javascript:toggleList('1.9_rc1.api_changes')">API Changes</a>&nbsp;&nbsp;&nbsp;(5)
    <ol id="1.9_rc1.api_changes.list">
      <li>Several methods and fields have been deprecated. The API documentation
contains information about the recommended replacements. It is planned
that most of the deprecated methods and fields will be removed in
Lucene 2.0.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>The Russian and the German analyzers have been moved to contrib/analyzers.
Also, the WordlistLoader class has been moved one level up in the
hierarchy and is now org.apache.lucene.analysis.WordlistLoader<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>The API contained methods that declared to throw an IOException
but that never did this. These declarations have been removed. If
your code tries to catch these exceptions you might need to remove
those catch clauses to avoid compile errors.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Add a serializable Parameter Class to standardize parameter enum
classes in BooleanClause and Field.<br /><span class="attrib">(Christoph)</span></li>
      <li>Added rewrite methods to all SpanQuery subclasses that nest other SpanQuerys.
This allows custom SpanQuery subclasses that rewrite (for term expansion, for
example) to nest within the built-in SpanQuery classes successfully.
</li>
    </ol>
  </li>
  <li><a id="1.9_rc1.bug_fixes" href="javascript:toggleList('1.9_rc1.bug_fixes')">Bug fixes</a>&nbsp;&nbsp;&nbsp;(24)
    <ol id="1.9_rc1.bug_fixes.list">
      <li>The JSP demo page (src/jsp/results.jsp) now properly closes the
IndexSearcher it opens.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Fixed a bug in IndexWriter.addIndexes(IndexReader[] readers) that
prevented deletion of obsolete segments.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Fix in FieldInfos to avoid the return of an extra blank field in
IndexReader.getFieldNames() (<a href="http://issues.apache.org/jira/browse/LUCENE-102">Patch #19058&nbsp;[LUCENE-102]</a>).<br /><span class="attrib">(Mark Harwood via Bernhard)</span></li>
      <li>Some combinations of BooleanQuery and MultiPhraseQuery (formerly
PhrasePrefixQuery) could provoke UnsupportedOperationException
(<a href="http://issues.apache.org/jira/browse/LUCENE-337">bug #33161&nbsp;[LUCENE-337]</a>).<br /><span class="attrib">(Rhett Sutphin via Daniel Naber)</span></li>
      <li>Small bug in skipTo of ConjunctionScorer that caused NullPointerException
if skipTo() was called without prior call to next() fixed.<br /><span class="attrib">(Christoph)</span></li>
      <li>Disable Similiarty.coord() in the scoring of most automatically
generated boolean queries.  The coord() score factor is
appropriate when clauses are independently specified by a user,
but is usually not appropriate when clauses are generated
automatically, e.g., by a fuzzy, wildcard or range query.  Matches
on such automatically generated queries are no longer penalized
for not matching all terms.<br /><span class="attrib">(Doug Cutting, <a href="http://issues.apache.org/jira/browse/LUCENE-346">Patch #33472&nbsp;[LUCENE-346]</a>)</span></li>
      <li>Getting a lock file with Lock.obtain(long) was supposed to wait for
a given amount of milliseconds, but this didn't work.<br /><span class="attrib">(John Wang via Daniel Naber, <a href="http://issues.apache.org/jira/browse/LUCENE-353">Bug #33799&nbsp;[LUCENE-353]</a>)</span></li>
      <li>Fix FSDirectory.createOutput() to always create new files.
Previously, existing files were overwritten, and an index could be
corrupted when the old version of a file was longer than the new.
Now any existing file is first removed.<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Fix BooleanQuery containing nested SpanTermQuery's, which previously
could return an incorrect number of hits.<br /><span class="attrib">(Reece Wilton via Erik Hatcher, <a href="http://issues.apache.org/jira/browse/LUCENE-393">Bug #35157&nbsp;[LUCENE-393]</a>)</span></li>
      <li>Fix NullPointerException that could occur with a MultiPhraseQuery
inside a BooleanQuery.<br /><span class="attrib">(Hans Hjelm and Scotty Allen via Daniel Naber, <a href="http://issues.apache.org/jira/browse/LUCENE-404">Bug #35626&nbsp;[LUCENE-404]</a>)</span></li>
      <li>Fixed SnowballFilter to pass through the position increment from
the original token.<br /><span class="attrib">(Yonik Seeley via Erik Hatcher, <a href="http://issues.apache.org/jira/browse/LUCENE-437">LUCENE-437</a>)</span></li>
      <li>Added Unicode range of Korean characters to StandardTokenizer,
grouping contiguous characters into a token rather than one token
per character.  This change also changes the token type to "&lt;CJ&gt;"
for Chinese and Japanese character tokens (previously it was "&lt;CJK&gt;").<br /><span class="attrib">(Cheolgoo Kang via Otis and Erik, <a href="http://issues.apache.org/jira/browse/LUCENE-444">LUCENE-444</a> and <a href="http://issues.apache.org/jira/browse/LUCENE-461">LUCENE-461</a>)</span></li>
      <li>FieldsReader now looks at FieldInfo.storeOffsetWithTermVector and
FieldInfo.storePositionWithTermVector and creates the Field with
correct TermVector parameter.<br /><span class="attrib">(Frank Steinmann via Bernhard, <a href="http://issues.apache.org/jira/browse/LUCENE-455">LUCENE-455</a>)</span></li>
      <li>Fixed WildcardQuery to prevent "cat" matching "ca??".<br /><span class="attrib">(Xiaozheng Ma via Bernhard, <a href="http://issues.apache.org/jira/browse/LUCENE-306">LUCENE-306</a>)</span></li>
      <li>Fixed a bug where MultiSearcher and ParallelMultiSearcher could
change the sort order when sorting by string for documents without
a value for the sort field.<br /><span class="attrib">(Luc Vanlerberghe via Yonik, <a href="http://issues.apache.org/jira/browse/LUCENE-453">LUCENE-453</a>)</span></li>
      <li>Fixed a sorting problem with MultiSearchers that can lead to
missing or duplicate docs due to equal docs sorting in an arbitrary order.<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-456">LUCENE-456</a>)</span></li>
      <li>A single hit using the expert level sorted search methods
resulted in the score not being normalized.<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-462">LUCENE-462</a>)</span></li>
      <li>Fixed inefficient memory usage when loading an index into RAMDirectory.<br /><span class="attrib">(Volodymyr Bychkoviak via Bernhard, <a href="http://issues.apache.org/jira/browse/LUCENE-475">LUCENE-475</a>)</span></li>
      <li>Corrected term offsets returned by ChineseTokenizer.<br /><span class="attrib">(Ray Tsang via Erik Hatcher, <a href="http://issues.apache.org/jira/browse/LUCENE-324">LUCENE-324</a>)</span></li>
      <li>Fixed MultiReader.undeleteAll() to correctly update numDocs.<br /><span class="attrib">(Robert Kirchgessner via Doug Cutting, <a href="http://issues.apache.org/jira/browse/LUCENE-479">LUCENE-479</a>)</span></li>
      <li>Race condition in IndexReader.getCurrentVersion() and isCurrent()
fixed by acquiring the commit lock.<br /><span class="attrib">(Luc Vanlerberghe via Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-481">LUCENE-481</a>)</span></li>
      <li>IndexWriter.setMaxBufferedDocs(1) didn't have the expected effect,
this has now been fixed.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Fixed QueryParser when called with a date in local form like
"[1/16/2000 TO 1/18/2000]". This query did not include the documents
of 1/18/2000, i.e. the last day was not included.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Removed sorting constraint that threw an exception if there were
not yet any values for the sort field<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-374">LUCENE-374</a>)</span></li>
    </ol>
  </li>
  <li><a id="1.9_rc1.optimizations" href="javascript:toggleList('1.9_rc1.optimizations')">Optimizations</a>&nbsp;&nbsp;&nbsp;(11)
    <ol id="1.9_rc1.optimizations.list">
      <li>Disk usage (peak requirements during indexing and optimization)
in case of compound file format has been improved.<br /><span class="attrib">(Bernhard, Dmitry, and Christoph)</span></li>
      <li>Optimize the performance of certain uses of BooleanScorer,
TermScorer and IndexSearcher.  In particular, a BooleanQuery
composed of TermQuery, with not all terms required, that returns a
TopDocs (e.g., through a Hits with no Sort specified) runs much
faster.<br /><span class="attrib">(cutting)</span></li>
      <li>Removed synchronization from reading of term vectors with an
IndexReader (<a href="http://issues.apache.org/jira/browse/LUCENE-265">Patch #30736&nbsp;[LUCENE-265]</a>).<br /><span class="attrib">(Bernhard Messer via Christoph)</span></li>
      <li>Optimize term-dictionary lookup to allocate far fewer terms when
scanning for the matching term.  This speeds searches involving
low-frequency terms, where the cost of dictionary lookup can be
significant.<br /><span class="attrib">(cutting)</span></li>
      <li>Optimize fuzzy queries so the standard fuzzy queries with a prefix
of 0 now run 20-50% faster (<a href="http://issues.apache.org/jira/browse/LUCENE-296">Patch #31882&nbsp;[LUCENE-296]</a>).<br /><span class="attrib">(Jonathan Hager via Daniel Naber)</span></li>
      <li>A Version of BooleanScorer (BooleanScorer2) added that delivers
documents in increasing order and implements skipTo. For queries
with required or forbidden clauses it may be faster than the old
BooleanScorer, for BooleanQueries consisting only of optional
clauses it is probably slower. The new BooleanScorer is now the
default.<br /><span class="attrib">(<a href="http://issues.apache.org/jira/browse/LUCENE-294">Patch 31785&nbsp;[LUCENE-294]</a> by Paul Elschot via Christoph)</span></li>
      <li>Use uncached access to norms when merging to reduce RAM usage.
(<a href="http://issues.apache.org/jira/browse/LUCENE-326">Bug #32847&nbsp;[LUCENE-326]</a>).<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Don't read term index when random-access is not required.  This
reduces time to open IndexReaders and they use less memory when
random access is not required, e.g., when merging segments.  The
term index is now read into memory lazily at the first
random-access.<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Optimize IndexWriter.addIndexes(Directory[]) when the number of
added indexes is larger than mergeFactor.  Previously this could
result in quadratic performance.  Now performance is n log(n).<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Speed up the creation of TermEnum for indices with multiple
segments and deleted documents, and thus speed up PrefixQuery,
RangeQuery, WildcardQuery, FuzzyQuery, RangeFilter, DateFilter,
and sorting the first time on a field.<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-454">LUCENE-454</a>)</span></li>
      <li>Optimized and generalized 32 bit floating point to byte
(custom 8 bit floating point) conversions.  Increased the speed of
Similarity.encodeNorm() anywhere from 10% to 250%, depending on the JVM.<br /><span class="attrib">(Yonik Seeley, <a href="http://issues.apache.org/jira/browse/LUCENE-467">LUCENE-467</a>)</span></li>
    </ol>
  </li>
  <li><a id="1.9_rc1.infrastructure" href="javascript:toggleList('1.9_rc1.infrastructure')">Infrastructure</a>&nbsp;&nbsp;&nbsp;(2)
    <ol id="1.9_rc1.infrastructure.list">
      <li>Lucene's source code repository has converted from CVS to
Subversion.  The new repository is at
http://svn.apache.org/repos/asf/lucene/java/trunk
</li>
      <li>Lucene's issue tracker has migrated from Bugzilla to JIRA.
Lucene's JIRA is at http://issues.apache.org/jira/browse/LUCENE
The old issues are still available at
http://issues.apache.org/bugzilla/show_bug.cgi?id=xxxx
(use the bug number instead of xxxx)
</li>
    </ol>
  </li>
</ul>
<h3><a id="1.4.3" href="javascript:toggleList('1.4.3')">Release 1.4.3  [2004-12-07]</a></h3>
    <ol id="1.4.3.list">
      <li>The JSP demo page (src/jsp/results.jsp) now properly escapes error
messages which might contain user input (e.g. error messages about
query parsing). If you used that page as a starting point for your
own code please make sure your code also properly escapes HTML
characters from user input in order to avoid so-called cross site
scripting attacks.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>QueryParser changes in 1.4.2 broke the QueryParser API. Now the old
API is supported again.<br /><span class="attrib">(Christoph)</span></li>
    </ol>
<h3><a id="1.4.2" href="javascript:toggleList('1.4.2')">Release 1.4.2  [2004-10-01]</a></h3>
    <ol id="1.4.2.list">
      <li>Fixed <a href="http://issues.apache.org/jira/browse/LUCENE-277">bug #31241&nbsp;[LUCENE-277]</a>: Sorting could lead to incorrect results (documents
missing, others duplicated) if the sort keys were not unique and there
were more than 100 matches.<br /><span class="attrib">(Daniel Naber)</span></li>
      <li>Memory leak in Sort code (<a href="http://issues.apache.org/jira/browse/LUCENE-276">bug #31240&nbsp;[LUCENE-276]</a>) eliminated.<br /><span class="attrib">(Rafal Krzewski via Christoph and Daniel)</span></li>
      <li>FuzzyQuery now takes an additional parameter that specifies the
minimum similarity that is required for a term to match the query.
The QueryParser syntax for this is term~x, where x is a floating
point number &gt;= 0 and &lt; 1 (a bigger number means that a higher
similarity is required). Furthermore, a prefix can be specified
for FuzzyQuerys so that only those terms are considered similar that
start with this prefix. This can speed up FuzzyQuery greatly.<br /><span class="attrib">(Daniel Naber, Christoph Goller)</span></li>
      <li>PhraseQuery and PhrasePrefixQuery now allow the explicit specification
of relative positions.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>QueryParser changes: Fix for ArrayIndexOutOfBoundsExceptions
(<a href="http://issues.apache.org/jira/browse/LUCENE-35">patch #9110&nbsp;[LUCENE-35]</a>); some unused method parameters removed; The ability
to specify a minimum similarity for FuzzyQuery has been added.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>IndexSearcher optimization: a new ScoreDoc is no longer allocated
for every non-zero-scoring hit.  This makes 'OR' queries that
contain common terms substantially faster.<br /><span class="attrib">(cutting)</span></li>
    </ol>
<h3><a id="1.4.1" href="javascript:toggleList('1.4.1')">Release 1.4.1  [2004-08-02]</a></h3>
    <ol id="1.4.1.list">
      <li>Fixed a performance bug in hit sorting code, where values were not
correctly cached.<br /><span class="attrib">(Aviran via cutting)</span></li>
      <li>Fixed errors in file format documentation.<br /><span class="attrib">(Daniel Naber)</span></li>
    </ol>
<h3><a id="1.4_final" href="javascript:toggleList('1.4_final')">Release 1.4 final  [2004-07-01]</a></h3>
    <ol id="1.4_final.list">
      <li>Added "an" to the list of stop words in StopAnalyzer, to complement
the existing "a" there.  Fix for <a href="http://issues.apache.org/jira/browse/LUCENE-132">bug 28960&nbsp;[LUCENE-132]</a>
 (http://issues.apache.org/bugzilla/show_bug.cgi?id=28960).<br /><span class="attrib">(Otis)</span></li>
      <li>Added new class FieldCache to manage in-memory caches of field term
values.<br /><span class="attrib">(Tim Jones)</span></li>
      <li>Added overloaded getFieldQuery method to QueryParser which
accepts the slop factor specified for the phrase (or the default
phrase slop for the QueryParser instance).  This allows overriding
methods to replace a PhraseQuery with a SpanNearQuery instead,
keeping the proper slop factor.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Changed the encoding of GermanAnalyzer.java and GermanStemmer.java to
UTF-8 and changed the build encoding to UTF-8, to make changed files
compile.<br /><span class="attrib">(Otis Gospodnetic)</span></li>
      <li>Removed synchronization from term lookup under IndexReader methods
termFreq(), termDocs() or termPositions() to improve
multi-threaded performance.<br /><span class="attrib">(cutting)</span></li>
      <li>Fix a bug where obsolete segment files were not deleted on Win32.
</li>
    </ol>
<h3><a id="1.4_rc3" href="javascript:toggleList('1.4_rc3')">Release 1.4 RC3  [2004-05-11]</a></h3>
    <ol id="1.4_rc3.list">
      <li>Fixed several search bugs introduced by the skipTo() changes in
release 1.4RC1.  The index file format was changed a bit, so
collections must be re-indexed to take advantage of the skipTo()
optimizations.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Added new Document methods, removeField() and removeFields().<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Fixed inconsistencies with index closing.  Indexes and directories
are now only closed automatically by Lucene when Lucene opened
them automatically.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Added new class: FilteredQuery.<br /><span class="attrib">(Tim Jones)</span></li>
      <li>Added a new SortField type for custom comparators.<br /><span class="attrib">(Tim Jones)</span></li>
      <li>Lock obtain timed out message now displays the full path to the lock
file.<br /><span class="attrib">(Daniel Naber via Erik)</span></li>
      <li>Fixed a bug in SpanNearQuery when ordered.<br /><span class="attrib">(Paul Elschot via cutting)</span></li>
      <li>Fixed so that FSDirectory's locks still work when the
java.io.tmpdir system property is null.<br /><span class="attrib">(cutting)</span></li>
      <li>Changed FilteredTermEnum's constructor to take no parameters,
as the parameters were ignored anyway<br /><span class="attrib">(<a href="http://issues.apache.org/jira/browse/LUCENE-224">bug #28858&nbsp;[LUCENE-224]</a>)</span></li>
    </ol>
<h3><a id="1.4_rc2" href="javascript:toggleList('1.4_rc2')">Release 1.4 RC2  [2004-03-30]</a></h3>
    <ol id="1.4_rc2.list">
      <li>GermanAnalyzer now throws an exception if the stopword file
cannot be found (<a href="http://issues.apache.org/jira/browse/LUCENE-203">bug #27987&nbsp;[LUCENE-203]</a>). It now uses LowerCaseFilter
(<a href="http://issues.apache.org/jira/browse/LUCENE-87">bug #18410&nbsp;[LUCENE-87]</a>)<br /><span class="attrib">(Daniel Naber via Otis, Erik)</span></li>
      <li>Fixed a few bugs in the file format documentation.<br /><span class="attrib">(cutting)</span></li>
    </ol>
<h3><a id="1.4_rc1" href="javascript:toggleList('1.4_rc1')">Release 1.4 RC1  [2004-03-29]</a></h3>
    <ol id="1.4_rc1.list">
      <li>Changed the format of the .tis file, so that:
<p/>
- it has a format version number, which makes it easier to
  back-compatibly change file formats in the future.
<p/>
- the term count is now stored as a long.  This was the one aspect
  of the Lucene's file formats which limited index size.
<p/>
- a few internal index parameters are now stored in the index, so
  that they can (in theory) now be changed from index to index,
  although there is not yet an API to do so.
<p/>
These changes are back compatible.  The new code can read old
indexes.  But old code will not be able read new indexes.<br /><span class="attrib">(cutting)</span></li>
      <li>Added an optimized implementation of TermDocs.skipTo().  A skip
table is now stored for each term in the .frq file.  This only
adds a percent or two to overall index size, but can substantially
speedup many searches.<br /><span class="attrib">(cutting)</span></li>
      <li>Restructured the Scorer API and all Scorer implementations to take
advantage of an optimized TermDocs.skipTo() implementation.  In
particular, PhraseQuerys and conjunctive BooleanQuerys are
faster when one clause has substantially fewer matches than the
others.  (A conjunctive BooleanQuery is a BooleanQuery where all
clauses are required.)<br /><span class="attrib">(cutting)</span></li>
      <li>Added new class ParallelMultiSearcher.  Combined with
RemoteSearchable this makes it easy to implement distributed
search systems.<br /><span class="attrib">(Jean-Francois Halleux via cutting)</span></li>
      <li>Added support for hit sorting.  Results may now be sorted by any
indexed field.  For details see the javadoc for
Searcher#search(Query, Sort).<br /><span class="attrib">(Tim Jones via Cutting)</span></li>
      <li>Changed FSDirectory to auto-create a full directory tree that it
needs by using mkdirs() instead of mkdir().<br /><span class="attrib">(Mladen Turk via Otis)</span></li>
      <li>Added a new span-based query API.  This implements, among other
things, nested phrases.  See javadocs for details.<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Added new method Query.getSimilarity(Searcher), and changed
scorers to use it.  This permits one to subclass a Query class so
that it can specify its own Similarity implementation, perhaps
one that delegates through that of the Searcher.<br /><span class="attrib">(Julien Nioche
via Cutting)</span></li>
      <li>Added MultiReader, an IndexReader that combines multiple other
IndexReaders.<br /><span class="attrib">(Cutting)</span></li>
      <li>Added support for term vectors.  See Field#isTermVectorStored().<br /><span class="attrib">(Grant Ingersoll, Cutting &amp; Dmitry)</span></li>
      <li>Fixed the old bug with escaping of special characters in query
strings: http://issues.apache.org/bugzilla/show_bug.cgi?id=24665<br /><span class="attrib">(Jean-Francois Halleux via Otis)</span></li>
      <li>Added support for overriding default values for the following,
using system properties:
  - default commit lock timeout
  - default maxFieldLength
  - default maxMergeDocs
  - default mergeFactor
  - default minMergeDocs
  - default write lock timeout<br /><span class="attrib">(Otis)</span></li>
      <li>Changed QueryParser.jj to allow '-' and '+' within tokens:
http://issues.apache.org/bugzilla/show_bug.cgi?id=27491<br /><span class="attrib">(Morus Walter via Otis)</span></li>
      <li>Changed so that the compound index format is used by default.
This makes indexing a bit slower, but vastly reduces the chances
of file handle problems.<br /><span class="attrib">(Cutting)</span></li>
    </ol>
<h3><a id="1.3_final" href="javascript:toggleList('1.3_final')">Release 1.3 final  [2003-12-26]</a></h3>
    <ol id="1.3_final.list">
      <li>Added catch of BooleanQuery$TooManyClauses in QueryParser to
throw ParseException instead.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Fixed a NullPointerException in Query.explain().<br /><span class="attrib">(Doug Cutting)</span></li>
      <li>Added a new method IndexReader.setNorm(), that permits one to
alter the boosting of fields after an index is created.
</li>
      <li>Distinguish between the final position and length when indexing a
field.  The length is now defined as the total number of tokens,
instead of the final position, as it was previously.  Length is
used for score normalization (Similarity.lengthNorm()) and for
controlling memory usage (IndexWriter.maxFieldLength).  In both of
these cases, the total number of tokens is a better value to use
than the final token position.  Position is used in phrase
searching (see PhraseQuery and Token.setPositionIncrement()).
</li>
      <li>Fix StandardTokenizer's handling of CJK characters (Chinese,
Japanese and Korean ideograms).  Previously contiguous sequences
were combined in a single token, which is not very useful.  Now
each ideogram generates a separate token, which is more useful.
</li>
    </ol>
<h3><a id="1.3_rc3" href="javascript:toggleList('1.3_rc3')">Release 1.3 RC3  [2003-11-25]</a></h3>
    <ol id="1.3_rc3.list">
      <li>Added minMergeDocs in IndexWriter.  This can be raised to speed
indexing without altering the number of files, but only using more
memory.<br /><span class="attrib">(Julien Nioche via Otis)</span></li>
      <li>Fix <a href="http://issues.apache.org/jira/browse/LUCENE-162">bug #24786&nbsp;[LUCENE-162]</a>, in query rewriting.<br /><span class="attrib">(bschneeman via Cutting)</span></li>
      <li>Fix <a href="http://issues.apache.org/jira/browse/LUCENE-85">bug #16952&nbsp;[LUCENE-85]</a>, in demo HTML parser, skip comments in
javascript.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Fix <a href="http://issues.apache.org/jira/browse/LUCENE-105">bug #19253&nbsp;[LUCENE-105]</a>, in demo HTML parser, add whitespace as needed to
output<br /><span class="attrib">(Daniel Naber via Christoph Goller)</span></li>
      <li>Fix <a href="http://issues.apache.org/jira/browse/LUCENE-159">bug #24301&nbsp;[LUCENE-159]</a>, in demo HTML parser, long titles no longer
hang things.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Fix <a href="http://issues.apache.org/jira/browse/LUCENE-138">bug #23534&nbsp;[LUCENE-138]</a>, Replace use of file timestamp of segments file
with an index version number stored in the segments file.  This
resolves problems when running on file systems with low-resolution
timestamps, e.g., HFS under MacOS X.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Fix QueryParser so that TokenMgrError is not thrown, only
ParseException.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Fix some bugs introduced by change 11 of RC2.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Fixed a problem compiling TestRussianStem.<br /><span class="attrib">(Christoph Goller)</span></li>
      <li>Cleaned up some build stuff.<br /><span class="attrib">(Erik Hatcher)</span></li>
    </ol>
<h3><a id="1.3_rc2" href="javascript:toggleList('1.3_rc2')">Release 1.3 RC2  [2003-10-22]</a></h3>
    <ol id="1.3_rc2.list">
      <li>Added getFieldNames(boolean) to IndexReader, SegmentReader, and
SegmentsReader.<br /><span class="attrib">(Julien Nioche via otis)</span></li>
      <li>Changed file locking to place lock files in
System.getProperty("java.io.tmpdir"), where all users are
permitted to write files.  This way folks can open and correctly
lock indexes which are read-only to them.
</li>
      <li>IndexWriter: added a new method, addDocument(Document, Analyzer),
permitting one to easily use different analyzers for different
documents in the same index.
</li>
      <li>Minor enhancements to FuzzyTermEnum.<br /><span class="attrib">(Christoph Goller via Otis)</span></li>
      <li>PriorityQueue: added insert(Object) method and adjusted IndexSearcher
and MultiIndexSearcher to use it.<br /><span class="attrib">(Christoph Goller via Otis)</span></li>
      <li>Fixed a bug in IndexWriter that returned incorrect docCount().<br /><span class="attrib">(Christoph Goller via Otis)</span></li>
      <li>Fixed SegmentsReader to eliminate the confusing and slightly different
behaviour of TermEnum when dealing with an enumeration of all terms,
versus an enumeration starting from a specific term.
This patch also fixes incorrect term document frequencies when the same term
is present in multiple segments.<br /><span class="attrib">(Christoph Goller via Otis)</span></li>
      <li>Added CachingWrapperFilter and PerFieldAnalyzerWrapper.<br /><span class="attrib">(Erik Hatcher)</span></li>
      <li>Added support for the new "compound file" index format<br /><span class="attrib">(Dmitry
Serebrennikov)</span></li>
      <li>Added Locale setting to QueryParser, for use by date range parsing.
</li>
      <li>Changed IndexReader so that it can be subclassed by classes
outside of its package.  Previously it had package-private
abstract methods.  Also modified the index merging code so that it
can work on an arbitrary IndexReader implementation, and added a
new method, IndexWriter.addIndexes(IndexReader[]), to take
advantage of this.<br /><span class="attrib">(cutting)</span></li>
      <li>Added a limit to the number of clauses which may be added to a
BooleanQuery.  The default limit is 1024 clauses.  This should
stop most OutOfMemoryExceptions by prefix, wildcard and fuzzy
queries which run amok.<br /><span class="attrib">(cutting)</span></li>
      <li>Add new method: IndexReader.undeleteAll().  This undeletes all
deleted documents which still remain in the index.<br /><span class="attrib">(cutting)</span></li>
    </ol>
<h3><a id="1.3_rc1" href="javascript:toggleList('1.3_rc1')">Release 1.3 RC1  [2003-03-24]</a></h3>
    <ol id="1.3_rc1.list">
      <li>Fixed PriorityQueue's clear() method.
Fix for <a href="http://issues.apache.org/jira/browse/LUCENE-37">bug 9454&nbsp;[LUCENE-37]</a>, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9454<br /><span class="attrib">(Matthijs Bomhoff via otis)</span></li>
      <li>Changed StandardTokenizer.jj grammar for EMAIL tokens.
Fix for <a href="http://issues.apache.org/jira/browse/LUCENE-34">bug 9015&nbsp;[LUCENE-34]</a>, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9015<br /><span class="attrib">(Dale Anson via otis)</span></li>
      <li>Added the ability to disable lock creation by using disableLuceneLocks
system property.  This is useful for read-only media, such as CD-ROMs.<br /><span class="attrib">(otis)</span></li>
      <li>Added id method to Hits to be able to access the index global id.
Required for sorting options.<br /><span class="attrib">(carlson)</span></li>
      <li>Added support for new range query syntax to QueryParser.jj.<br /><span class="attrib">(briangoetz)</span></li>
      <li>Added the ability to retrieve HTML documents' META tag values to
HTMLParser.jj.<br /><span class="attrib">(Mark Harwood via otis)</span></li>
      <li>Modified QueryParser to make it possible to programmatically specify the
default Boolean operator (OR or AND).<br /><span class="attrib">(Péter Halácsy via otis)</span></li>
      <li>Made many search methods and classes non-final, per requests.
This includes IndexWriter and IndexSearcher, among others.<br /><span class="attrib">(cutting)</span></li>
      <li>Added class RemoteSearchable, providing support for remote
searching via RMI.  The test class RemoteSearchableTest.java
provides an example of how this can be used.<br /><span class="attrib">(cutting)</span></li>
      <li>Added PhrasePrefixQuery (and supporting MultipleTermPositions).  The
test class TestPhrasePrefixQuery provides the usage example.<br /><span class="attrib">(Anders Nielsen via otis)</span></li>
      <li>Changed the German stemming algorithm to ignore case while
stripping. The new algorithm is faster and produces more equal
stems from nouns and verbs derived from the same word.<br /><span class="attrib">(gschwarz)</span></li>
      <li>Added support for boosting the score of documents and fields via
the new methods Document.setBoost(float) and Field.setBoost(float).
<p/>
Note: This changes the encoding of an indexed value.  Indexes
should be re-created from scratch in order for search scores to
be correct.  With the new code and an old index, searches will
yield very large scores for shorter fields, and very small scores
for longer fields.  Once the index is re-created, scores will be
as before.<br /><span class="attrib">(cutting)</span></li>
      <li>Added new method Token.setPositionIncrement().
<p/>
This permits, for the purpose of phrase searching, placing
multiple terms in a single position.  This is useful with
stemmers that produce multiple possible stems for a word.
<p/>
This also permits the introduction of gaps between terms, so that
terms which are adjacent in a token stream will not be matched by
and exact phrase query.  This makes it possible, e.g., to build
an analyzer where phrases are not matched over stop words which
have been removed.
<p/>
Finally, repeating a token with an increment of zero can also be
used to boost scores of matches on that token.<br /><span class="attrib">(cutting)</span></li>
      <li>Added new Filter class, QueryFilter.  This constrains search
results to only match those which also match a provided query.
Results are cached, so that searches after the first on the same
index using this filter are very fast.
<p/>
This could be used, for example, with a RangeQuery on a formatted
date field to implement date filtering.  One could re-use a
single QueryFilter that matches, e.g., only documents modified
within the last week.  The QueryFilter and RangeQuery would only
need to be reconstructed once per day.<br /><span class="attrib">(cutting)</span></li>
      <li>Added a new IndexWriter method, getAnalyzer().  This returns the
analyzer used when adding documents to this index.<br /><span class="attrib">(cutting)</span></li>
      <li>Fixed a bug with IndexReader.lastModified().  Before, document
deletion did not update this.  Now it does.<br /><span class="attrib">(cutting)</span></li>
      <li>Added Russian Analyzer.<br /><span class="attrib">(Boris Okner via otis)</span></li>
      <li>Added a public, extensible scoring API.  For details, see the
javadoc for org.apache.lucene.search.Similarity.
</li>
      <li>Fixed return of Hits.id() from float to int.<br /><span class="attrib">(Terry Steichen via Peter)</span>.
</li>
      <li>Added getFieldNames() to IndexReader and Segment(s)Reader classes.<br /><span class="attrib">(Peter Mularien via otis)</span></li>
      <li>Added getFields(String) and getValues(String) methods.
Contributed by Rasik Pandey on 2002-10-09<br /><span class="attrib">(Rasik Pandey via otis)</span></li>
      <li>Revised internal search APIs.  Changes include:
<p/>
  a. Queries are no longer modified during a search.  This makes
  it possible, e.g., to reuse the same query instance with
  multiple indexes from multiple threads.
<p/>
  b. Term-expanding queries (e.g. PrefixQuery, WildcardQuery,
  etc.)  now work correctly with MultiSearcher, fixing bugs <a href="http://issues.apache.org/jira/browse/LUCENE-56">12619&nbsp;[LUCENE-56]</a>
  and <a href="http://issues.apache.org/jira/browse/LUCENE-57">12667&nbsp;[LUCENE-57]</a>.
<p/>
  c. Boosting BooleanQuery's now works, and is supported by the
  query parser (problem reported by Lee Mallabone).  Thus a query
  like "(+foo +bar)^2 +baz" is now supported and equivalent to
  "(+foo^2 +bar^2) +baz".
<p/>
  d. New method: Query.rewrite(IndexReader).  This permits a
  query to re-write itself as an alternate, more primitive query.
  Most of the term-expanding query classes (PrefixQuery,
  WildcardQuery, etc.) are now implemented using this method.
<p/>
  e. New method: Searchable.explain(Query q, int doc).  This
  returns an Explanation instance that describes how a particular
  document is scored against a query.  An explanation can be
  displayed as either plain text, with the toString() method, or
  as HTML, with the toHtml() method.  Note that computing an
  explanation is as expensive as executing the query over the
  entire index.  This is intended to be used in developing
  Similarity implementations, and, for good performance, should
  not be displayed with every hit.
<p/>
  f. Scorer and Weight are public, not package protected.  It now
  possible for someone to write a Scorer implementation that is
  not in the org.apache.lucene.search package.  This is still
  fairly advanced programming, and I don't expect anyone to do
  this anytime soon, but at least now it is possible.
<p/>
  g. Added public accessors to the primitive query classes
  (TermQuery, PhraseQuery and BooleanQuery), permitting access to
  their terms and clauses.
<p/>
Caution: These are extensive changes and they have not yet been
tested extensively.  Bug reports are appreciated.<br /><span class="attrib">(cutting)</span></li>
      <li>Added convenience RAMDirectory constructors taking File and String
arguments, for easy FSDirectory to RAMDirectory conversion.<br /><span class="attrib">(otis)</span></li>
      <li>Added code for manual renaming of files in FSDirectory, since it
has been reported that java.io.File's renameTo(File) method sometimes
fails on Windows JVMs.<br /><span class="attrib">(Matt Tucker via otis)</span></li>
      <li>Refactored QueryParser to make it easier for people to extend it.
Added the ability to automatically lower-case Wildcard terms in
the QueryParser.<br /><span class="attrib">(Tatu Saloranta via otis)</span></li>
    </ol>
<h3><a id="1.2_rc6" href="javascript:toggleList('1.2_rc6')">Release 1.2 RC6  [2002-06-13]</a></h3>
    <ol id="1.2_rc6.list">
      <li>Changed QueryParser.jj to have "?" be a special character which
allowed it to be used as a wildcard term. Updated TestWildcard
unit test also.<br /><span class="attrib">(Ralf Hettesheimer via carlson)</span></li>
    </ol>
<h3><a id="1.2_rc5" href="javascript:toggleList('1.2_rc5')">Release 1.2 RC5  [2002-05-14]</a></h3>
    <ol id="1.2_rc5.list">
      <li>Renamed build.properties to default.properties and updated
the BUILD.txt document to describe how to override the
default.property settings without having to edit the file. This
brings the build process closer to Scarab's build process.<br /><span class="attrib">(jon)</span></li>
      <li>Added MultiFieldQueryParser class.<br /><span class="attrib">(Kelvin Tan, via otis)</span></li>
      <li>Updated "powered by" links.<br /><span class="attrib">(otis)</span></li>
      <li>Fixed instruction for setting up JavaCC - <a href="http://issues.apache.org/jira/browse/LUCENE-18">Bug #7017&nbsp;[LUCENE-18]</a><br /><span class="attrib">(otis)</span></li>
      <li>Added throwing exception if FSDirectory could not create directory
- <a href="http://issues.apache.org/jira/browse/LUCENE-16">Bug #6914&nbsp;[LUCENE-16]</a><br /><span class="attrib">(Eugene Gluzberg via otis)</span></li>
      <li>Update MultiSearcher, MultiFieldParse, Constants, DateFilter,
LowerCaseTokenizer javadoc<br /><span class="attrib">(otis)</span></li>
      <li>Added fix to avoid NullPointerException in results.jsp<br /><span class="attrib">(Mark Hayes via otis)</span></li>
      <li>Changed Wildcard search to find 0 or more char instead of 1 or more<br /><span class="attrib">(Lee Mallobone, via otis)</span></li>
      <li>Fixed error in offset issue in GermanStemFilter - <a href="http://issues.apache.org/jira/browse/LUCENE-23">Bug #7412&nbsp;[LUCENE-23]</a><br /><span class="attrib">(Rodrigo Reyes, via otis)</span></li>
      <li>Added unit tests for wildcard search and DateFilter<br /><span class="attrib">(otis)</span></li>
      <li>Allow co-existence of indexed and non-indexed fields with the same name<br /><span class="attrib">(cutting/casper, via otis)</span></li>
      <li>Add escape character to query parser.<br /><span class="attrib">(briangoetz)</span></li>
      <li>Applied a patch that ensures that searches that use DateFilter
don't throw an exception when no matches are found.<br /><span class="attrib">(David Smiley, via
otis)</span></li>
      <li>Fixed bugs in DateFilter and wildcardquery unit tests.<br /><span class="attrib">(cutting, otis, carlson)</span></li>
    </ol>
<h3><a id="1.2_rc4" href="javascript:toggleList('1.2_rc4')">Release 1.2 RC4  [2002-02-14]</a></h3>
    <ol id="1.2_rc4.list">
      <li>Updated contributions section of website.
Add XML Document #3 implementation to Document Section.
Also added Term Highlighting to Misc Section.<br /><span class="attrib">(carlson)</span></li>
      <li>Fixed NullPointerException for phrase searches containing
unindexed terms, introduced in 1.2RC3.<br /><span class="attrib">(cutting)</span></li>
      <li>Changed document deletion code to obtain the index write lock,
enforcing the fact that document addition and deletion cannot be
performed concurrently.<br /><span class="attrib">(cutting)</span></li>
      <li>Various documentation cleanups.<br /><span class="attrib">(otis, acoliver)</span></li>
      <li>Updated "powered by" links.<br /><span class="attrib">(cutting, jon)</span></li>
      <li>Fixed a bug in the GermanStemmer.<br /><span class="attrib">(Bernhard Messer, via otis)</span></li>
      <li>Changed Term and Query to implement Serializable.<br /><span class="attrib">(scottganyo)</span></li>
      <li>Fixed to never delete indexes added with IndexWriter.addIndexes().<br /><span class="attrib">(cutting)</span></li>
      <li>Upgraded to JUnit 3.7.<br /><span class="attrib">(otis)</span></li>
    </ol>
<h3><a id="1.2_rc3" href="javascript:toggleList('1.2_rc3')">Release 1.2 RC3  [2002-01-27]</a></h3>
    <ol id="1.2_rc3.list">
      <li>IndexWriter: fixed a bug where adding an optimized index to an
empty index failed.  This was encountered using addIndexes to copy
a RAMDirectory index to an FSDirectory.
</li>
      <li>RAMDirectory: fixed a bug where RAMInputStream could not read
across more than across a single buffer boundary.
</li>
      <li>Fix query parser so it accepts queries with unicode characters.<br /><span class="attrib">(briangoetz)</span></li>
      <li>Fix query parser so that PrefixQuery is used in preference to
WildcardQuery when there's only an asterisk at the end of the
term.  Previously PrefixQuery would never be used.
</li>
      <li>Fix tests so they compile; fix ant file so it compiles tests
properly.  Added test cases for Analyzers and PriorityQueue.
</li>
      <li>Updated demos, added Getting Started documentation.<br /><span class="attrib">(acoliver)</span></li>
      <li>Added 'contributions' section to website &amp; docs.<br /><span class="attrib">(carlson)</span></li>
      <li>Removed JavaCC from source distribution for copyright reasons.
Folks must now download this separately from metamata in order to
compile Lucene.<br /><span class="attrib">(cutting)</span></li>
      <li>Substantially improved the performance of DateFilter by adding the
ability to reuse TermDocs objects.<br /><span class="attrib">(cutting)</span></li>
      <li>Added IndexReader methods:
  public static boolean indexExists(String directory);
  public static boolean indexExists(File directory);
  public static boolean indexExists(Directory directory);
  public static boolean isLocked(Directory directory);
  public static void unlock(Directory directory);<br /><span class="attrib">(cutting, otis)</span></li>
      <li>Fixed bugs in GermanAnalyzer<br /><span class="attrib">(gschwarz)</span></li>
    </ol>
<h3><a id="1.2_rc2" href="javascript:toggleList('1.2_rc2')">Release 1.2 RC2  [2001-10-19]</a></h3>
    <ul id="1.2_rc2.list">
      <li>added sources to distribution
</li>
      <li>removed broken build scripts and libraries from distribution
</li>
      <li>SegmentsReader: fixed potential race condition
</li>
      <li>FSDirectory: fixed so that getDirectory(xxx,true) correctly
erases the directory contents, even when the directory
has already been accessed in this JVM.
</li>
      <li>RangeQuery: Fix issue where an inclusive range query would
include the nearest term in the index above a non-existant
specified upper term.
</li>
      <li>SegmentTermEnum: Fix NullPointerException in clone() method
when the Term is null.
</li>
      <li>JDK 1.1 compatibility fix: disabled lock files for JDK 1.1,
since they rely on a feature added in JDK 1.2.
<p/>
</li>
    </ul>
<h3><a id="1.2_rc1" href="javascript:toggleList('1.2_rc1')">Release 1.2 RC1 (first Apache release) [2001-10-02]</a></h3>
    <ul id="1.2_rc1.list">
      <li>packages renamed from com.lucene to org.apache.lucene
</li>
      <li>license switched from LGPL to Apache
</li>
      <li>ant-only build -- no more makefiles
</li>
      <li>addition of lock files--now fully thread &amp; process safe
</li>
      <li>addition of German stemmer
</li>
      <li>MultiSearcher now supports low-level search API
</li>
      <li>added RangeQuery, for term-range searching
</li>
      <li>Analyzers can choose tokenizer based on field name
</li>
      <li>misc bug fixes.
<p/>
</li>
    </ul>
<h3><a id="1.01b" href="javascript:toggleList('1.01b')">Release 1.01b (last Sourceforge release) [2001-07-02]</a></h3>
    <ul id="1.01b.list">
      <li>a few bug fixes
</li>
      <li>new Query Parser
</li>
      <li>new prefix query (search for "foo*" matches "food")
<p/>
</li>
    </ul>
<h3><a id="1.0" href="javascript:toggleList('1.0')">Release 1.0  [2000-10-04]</a></h3>
    <ul id="1.0.list">
      <li>This release fixes a few serious bugs and also includes some
performance optimizations, a stemmer, and a few other minor
enhancements.
</li>
    </ul>
<h3><a id="0.04" href="javascript:toggleList('0.04')">Release 0.04  [2000-04-19]</a></h3>
    <ul id="0.04.list">
      <li>Lucene now includes a grammar-based tokenizer, StandardTokenizer.
</li>
      <li>The only tokenizer included in the previous release (LetterTokenizer)
identified terms consisting entirely of alphabetic characters.  The
new tokenizer uses a regular-expression grammar to identify more
complex classes of terms, including numbers, acronyms, email
addresses, etc.
</li>
      <li>StandardTokenizer serves two purposes:
</li>
      <li>1. It is a much better, general purpose tokenizer for use by
   applications as is.
</li>
      <li>The easiest way for applications to start using
StandardTokenizer is to use StandardAnalyzer.
</li>
      <li>2. It provides a good example of grammar-based tokenization.
</li>
      <li>If an application has special tokenization requirements, it can
implement a custom tokenizer by copying the directory containing
the new tokenizer into the application and modifying it
accordingly.
</li>
    </ul>
<h3><a id="0.01" href="javascript:toggleList('0.01')">Release 0.01  [2000-03-30]</a></h3>
    <ul id="0.01.list">
      <li>First open source release.
</li>
      <li>The code has been re-organized into a new package and directory
structure for this release.  It builds OK, but has not been tested
beyond that since the re-organization.
</li>
    </ul>
</ul>
</body>
</html>
